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
a4b6a23a
Commit
a4b6a23a
authored
Sep 09, 2025
by
张九刚
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增用户状态日志记录功能,并优化了个人页面的代码格式和样式
parent
a83705bc
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
85 additions
and
153 deletions
+85
-153
md.js
md.js
+10
-0
person.vue
pages/person/person.vue
+75
-153
No files found.
md.js
View file @
a4b6a23a
...
...
@@ -178,6 +178,15 @@ const sensorPopLogTake = (logObj) => {
sensorPopLog
(
evt
);
};
const
sensorUserLogTake
=
(
logObj
)
=>
{
if
(
!
logObj
)
{
return
;
}
sensors
.
track
(
"xcxUserStatus"
,
{
...
logObj
,
});
};
export
default
{
init
,
sensors
,
...
...
@@ -188,4 +197,5 @@ export default {
sensorComponentLogTake
,
sensorPopLog
,
sensorPopLogTake
,
sensorUserLogTake
};
pages/person/person.vue
View file @
a4b6a23a
<
template
>
<view
class=
"person-page"
>
<image
class=
"icon-return"
:src=
"$baseUrl + 'person/icon_return.png'"
mode=
"aspectFit"
@
click=
"handleReturn"
/>
<image
class=
"banner_upload"
:src=
"$baseUrl + 'person/customer.png'"
mode=
"aspectFit"
:data-log=
"
{
xcxClick: '我的页面-信息修改页点击',
pageName: '我的页面-信息修改页',
buttonName: '上传背景',
}"
@click="handleUploadBackground"
/>
<image
class=
"icon-return"
:src=
"$baseUrl + 'person/icon_return.png'"
mode=
"aspectFit"
@
click=
"handleReturn"
/>
<image
class=
"banner_upload"
:src=
"$baseUrl + 'person/customer.png'"
mode=
"aspectFit"
:data-log=
"
{
xcxClick: '我的页面-信息修改页点击',
pageName: '我的页面-信息修改页',
buttonName: '上传背景',
}" @click="handleUploadBackground" />
<view
class=
"person-header"
>
<image
class=
"banner_bg"
:src=
"formData.backgroundImg || $baseUrl + 'person/banner.png'"
mode=
"aspectFill"
/>
<image
class=
"banner_cover"
:src=
"$baseUrl + 'person/cover_white.png'"
mode=
"aspectFill"
/>
<image
class=
"banner_bg"
:src=
"formData.backgroundImg || $baseUrl + 'person/banner.png'"
mode=
"aspectFill"
/>
<image
class=
"banner_cover"
:src=
"$baseUrl + 'person/cover_white.png'"
mode=
"aspectFill"
/>
</view>
<!-- 头像 -->
<view
class=
"person-avatar"
>
<view
class=
"person-avatar-box"
>
<button
class=
"avatar-wrapper"
open-type=
"chooseAvatar"
@
chooseavatar=
"onChooseAvatar"
>
<image
class=
"person-avatar-img"
mode=
"aspectFill"
:src=
"formData.babyAvatar || $baseUrl + 'common/default_avatar.png'"
></image>
<button
class=
"avatar-wrapper"
open-type=
"chooseAvatar"
@
chooseavatar=
"onChooseAvatar"
>
<image
class=
"person-avatar-img"
mode=
"aspectFill"
:src=
"formData.babyAvatar || $baseUrl + 'common/default_avatar.png'"
></image>
</button>
</view>
<image
class=
"avatar-edit"
:src=
"$baseUrl + 'person/icon_modify.png'"
mode=
"widthFix"
lazy-load=
"false"
binderror=
""
bindload=
""
/>
<image
class=
"avatar-edit"
:src=
"$baseUrl + 'person/icon_modify.png'"
mode=
"widthFix"
lazy-load=
"false"
binderror=
""
bindload=
""
/>
</view>
<form
@
submit=
"onSubmit"
>
<view
class=
"person-info"
>
<block
v-for=
"(item, index) in formItems
.filter(formItemFilter)
.slice(
0,
formData.babyStage == 2 && pageStatus.formStatus == 2
? 6
: formItems.length
)"
:key=
"item.name"
>
<view
class=
"form-row"
:style=
"
{
'border-bottom':
pageStatus.formStatus == 0
&&
<block
v-for=
"(item, index) in formItems
.filter(formItemFilter)
.slice(
0,
formData.babyStage == 2 && pageStatus.formStatus == 2
? 6
: formItems.length
)"
:key=
"item.name"
>
<view
class=
"form-row"
:style=
"
{
'border-bottom':
pageStatus.formStatus == 0
&&
index == formItems.filter(formItemFilter).length - 1
? 'none'
: '1rpx solid #f2f2f2',
}"
>
? 'none'
: '1rpx solid #f2f2f2',
}">
<text
class=
"form-label"
>
{{
getlabelFn
(
item
)
}}
<!--
{{
item
.
label
}}
-->
<text
v-if=
"item.required"
class=
"required"
>
*
</text>
</text>
<!-- 输入框类型 -->
<input
v-if=
"item.type === 'input'"
class=
"form-input"
:name=
"item.name"
:placeholder=
"item.placeholder"
v-model=
"formData[item.name]"
:maxlength=
"item.maxLength"
/>
<input
v-if=
"item.type === 'input'"
class=
"form-input"
:name=
"item.name"
:placeholder=
"item.placeholder"
v-model=
"formData[item.name]"
:maxlength=
"item.maxLength"
/>
<!-- 只读展示类型 -->
<view
v-else-if=
"item.type === 'display'"
class=
"form-input-box"
>
<view
class=
"form-input"
style=
"color: #222"
>
{{
formData
[
item
.
name
]
||
item
.
placeholder
}}
</view>
}}
</view>
</view>
<view
v-else-if=
"item.type === 'display-obj'"
class=
"form-input-box"
>
<view
v-else-if=
"item.type === 'display-obj'"
class=
"form-input-box"
>
<view
class=
"form-input"
style=
"color: #222"
>
{{
getLabelByValue
(
item
,
formData
[
item
.
name
])
}}
</view>
}}
</view>
</view>
<!-- 选择器类型 -->
<picker-custom
v-else-if=
"item.type === 'picker'"
:mode=
"item.mode"
:range=
"item.range"
:value=
"
item.mode === 'date'
? formData[item.name]
: getPickerIndex(item)
"
:onPickerChange=
"(e) => onPickerChange(e, item.name)"
:onLayerVisibleChange=
"(e) => (pageStatus.btnStatus = !e)"
:onStatusChange=
"onDateStatusChange"
>
<picker-custom
v-else-if=
"item.type === 'picker'"
:mode=
"item.mode"
:range=
"item.range"
:value=
"item.mode === 'date'
? formData[item.name]
: getPickerIndex(item)
"
:onPickerChange=
"(e) => onPickerChange(e, item.name)"
:onLayerVisibleChange=
"(e) => (pageStatus.btnStatus = !e)"
:onStatusChange=
"onDateStatusChange"
>
<view
class=
"form-input-box"
>
<view
class=
"form-input"
>
{{
getLabelByValue
(
item
,
formData
[
item
.
name
])
||
item
.
placeholder
}}
</view>
<image
class=
"form-input-icon"
:src=
"$baseUrl + 'person/icon_arrow_yellow_right.png'"
/>
}}
</view>
<image
class=
"form-input-icon"
:src=
"$baseUrl + 'person/icon_arrow_yellow_right.png'"
/>
</view>
</picker-custom>
<!-- 多选弹窗类型 -->
<view
v-else-if=
"item.type === 'multi-picker'"
@
click=
"handleMultiPickerOpen(item)"
>
<view
v-else-if=
"item.type === 'multi-picker'"
@
click=
"handleMultiPickerOpen(item)"
>
<view
class=
"form-input-box"
>
<view
class=
"form-input"
>
{{
(
formData
[
item
.
name
]
&&
(
formData
[
item
.
name
].
split
(
","
).
join
(
"、"
).
length
>
11
?
formData
[
item
.
name
]
.
split
(
","
)
.
join
(
"、"
)
.
slice
(
0
,
11
)
+
"..."
.
split
(
","
)
.
join
(
"、"
)
.
slice
(
0
,
11
)
+
"..."
:
formData
[
item
.
name
].
split
(
","
).
join
(
"、"
)))
||
item
.
placeholder
}}
</view>
<image
class=
"form-input-icon"
:src=
"$baseUrl + 'person/icon_arrow_yellow_right.png'"
/>
<image
class=
"form-input-icon"
:src=
"$baseUrl + 'person/icon_arrow_yellow_right.png'"
/>
</view>
</view>
<!-- 单选类型 -->
<radio-group
v-else-if=
"item.type === 'radio'"
@
change=
"(e) => onRadioChange(e, item.name)"
>
<label
v-for=
"opt in item.options"
:key=
"opt.value"
class=
"form-radio"
>
<radio
:value=
"opt.value"
:checked=
"formData[item.name] === opt.value"
/>
<radio-group
v-else-if=
"item.type === 'radio'"
@
change=
"(e) => onRadioChange(e, item.name)"
>
<label
v-for=
"opt in item.options"
:key=
"opt.value"
class=
"form-radio"
>
<radio
:value=
"opt.value"
:checked=
"formData[item.name] === opt.value"
/>
{{
opt
.
label
}}
</label>
</radio-group>
</view>
</block>
<view
v-if=
"formData.babyStage == 2"
class=
"form-bottom-btn"
@
click=
"handleFormBottomBtn"
>
<view
v-if=
"formData.babyStage == 2"
class=
"form-bottom-btn"
@
click=
"handleFormBottomBtn"
>
<text
class=
"form-bottom-text"
>
{{
pageStatus
.
formStatus
==
1
?
"收起"
:
"展开"
}}
</text>
<image
v-if=
"pageStatus.formStatus == 1"
class=
"form-bottom-icon"
:src=
"$baseUrl + 'person/icon_arrow_yellow_up.png'"
mode=
"aspectFit"
/>
<image
v-else
class=
"form-bottom-icon"
:src=
"$baseUrl + 'person/icon_arrow_yellow_down.png'"
mode=
"aspectFit"
/>
<image
v-if=
"pageStatus.formStatus == 1"
class=
"form-bottom-icon"
:src=
"$baseUrl + 'person/icon_arrow_yellow_up.png'"
mode=
"aspectFit"
/>
<image
v-else
class=
"form-bottom-icon"
:src=
"$baseUrl + 'person/icon_arrow_yellow_down.png'"
mode=
"aspectFit"
/>
</view>
</view>
<view
class=
"form-bottom"
></view>
...
...
@@ -206,18 +120,11 @@
</button>
</form>
<MultiSelectLayer
v-if=
"multiPickerStatus && currentMultiPickerName"
v-model=
"multiPickerStatus"
:title=
"
formItems.find((i) => i.name === currentMultiPickerName)?.label +
'(多选)'
"
:options=
"formItems.find((i) => i.name === currentMultiPickerName)?.range"
:modelSelected=
"multiPickerSelected[currentMultiPickerName]"
@
confirm=
"handleMultiPickerConfirm"
@
cancel=
"handleMultiPickerCancel"
/>
<MultiSelectLayer
v-if=
"multiPickerStatus && currentMultiPickerName"
v-model=
"multiPickerStatus"
:title=
"formItems.find((i) => i.name === currentMultiPickerName)?.label +
'(多选)'
"
:options=
"formItems.find((i) => i.name === currentMultiPickerName)?.range"
:modelSelected=
"multiPickerSelected[currentMultiPickerName]"
@
confirm=
"handleMultiPickerConfirm"
@
cancel=
"handleMultiPickerCancel"
/>
</view>
</
template
>
...
...
@@ -579,6 +486,13 @@ const onSubmit = async (e) => {
console
.
log
(
"提交数据"
,
data
);
const
pregnancyStatus
=
babyStageMap
.
find
((
i
)
=>
i
.
value
===
formData
.
value
.
babyStage
)?.
label
||
""
;
md
.
sensorUserLogTake
({
memberid
:
uni
.
getStorageSync
(
'memberId'
),
pregnancyStatus
:
pregnancyStatus
,
})
showLoading
();
const
res
=
await
updateBabyInfo
(
data
);
...
...
@@ -707,8 +621,8 @@ const getLabelByValue = (item, value) => {
item
.
placeholder
=
formData
.
value
.
babyBirthday
?
formData
.
value
.
babyBirthday
:
formData
.
value
.
babyStage
==
1
?
"请选择预产日期"
:
"请选择出生日期"
;
?
"请选择预产日期"
:
"请选择出生日期"
;
return
item
.
placeholder
;
}
return
value
;
...
...
@@ -846,9 +760,11 @@ watch(
<
style
lang=
"less"
scoped
>
@import "@/common.less";
.person-page {
background-color: #f6f8fa;
min-height: 100vh;
.icon-return {
width: 20rpx;
height: 32rpx;
...
...
@@ -870,6 +786,7 @@ watch(
.person-header {
position: relative;
height: 463rpx;
.banner_bg {
width: 100%;
height: 100%;
...
...
@@ -942,6 +859,7 @@ watch(
position: relative;
z-index: 2;
box-sizing: border-box;
.form-row {
display: flex;
align-items: center;
...
...
@@ -958,11 +876,13 @@ watch(
width: 250rpx;
color: #222;
font-size: 28rpx;
.required {
color: #b88a3a;
margin-left: -4rpx;
}
}
.form-input {
flex: 1;
color: #6f6d67;
...
...
@@ -998,6 +918,7 @@ watch(
justify-content: center;
width: 100%;
height: 80rpx;
.form-bottom-text {
font-size: 28rpx;
color: #6f6d67;
...
...
@@ -1015,6 +936,7 @@ watch(
height: 300rpx;
width: 100%;
}
.form-btn {
width: 686rpx;
height: 94rpx;
...
...
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