Commit a4b6a23a authored by 张九刚's avatar 张九刚

新增用户状态日志记录功能,并优化了个人页面的代码格式和样式

parent a83705bc
...@@ -178,6 +178,15 @@ const sensorPopLogTake = (logObj) => { ...@@ -178,6 +178,15 @@ const sensorPopLogTake = (logObj) => {
sensorPopLog(evt); sensorPopLog(evt);
}; };
const sensorUserLogTake = (logObj) => {
if (!logObj) {
return;
}
sensors.track("xcxUserStatus", {
...logObj,
});
};
export default { export default {
init, init,
sensors, sensors,
...@@ -188,4 +197,5 @@ export default { ...@@ -188,4 +197,5 @@ export default {
sensorComponentLogTake, sensorComponentLogTake,
sensorPopLog, sensorPopLog,
sensorPopLogTake, sensorPopLogTake,
sensorUserLogTake
}; };
<template> <template>
<view class="person-page"> <view class="person-page">
<image <image class="icon-return" :src="$baseUrl + 'person/icon_return.png'" mode="aspectFit" @click="handleReturn" />
class="icon-return"
:src="$baseUrl + 'person/icon_return.png'" <image class="banner_upload" :src="$baseUrl + 'person/customer.png'" mode="aspectFit" :data-log="{
mode="aspectFit"
@click="handleReturn"
/>
<image
class="banner_upload"
:src="$baseUrl + 'person/customer.png'"
mode="aspectFit"
:data-log="{
xcxClick: '我的页面-信息修改页点击', xcxClick: '我的页面-信息修改页点击',
pageName: '我的页面-信息修改页', pageName: '我的页面-信息修改页',
buttonName: '上传背景', buttonName: '上传背景',
}" }" @click="handleUploadBackground" />
@click="handleUploadBackground"
/>
<view class="person-header"> <view class="person-header">
<image <image class="banner_bg" :src="formData.backgroundImg || $baseUrl + 'person/banner.png'" mode="aspectFill" />
class="banner_bg" <image class="banner_cover" :src="$baseUrl + 'person/cover_white.png'" mode="aspectFill" />
:src="formData.backgroundImg || $baseUrl + 'person/banner.png'"
mode="aspectFill"
/>
<image
class="banner_cover"
:src="$baseUrl + 'person/cover_white.png'"
mode="aspectFill"
/>
</view> </view>
<!-- 头像 --> <!-- 头像 -->
<view class="person-avatar"> <view class="person-avatar">
<view class="person-avatar-box"> <view class="person-avatar-box">
<button <button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
class="avatar-wrapper" <image class="person-avatar-img" mode="aspectFill"
open-type="chooseAvatar" :src="formData.babyAvatar || $baseUrl + 'common/default_avatar.png'"></image>
@chooseavatar="onChooseAvatar"
>
<image
class="person-avatar-img"
mode="aspectFill"
:src="formData.babyAvatar || $baseUrl + 'common/default_avatar.png'"
></image>
</button> </button>
</view> </view>
<image <image class="avatar-edit" :src="$baseUrl + 'person/icon_modify.png'" mode="widthFix" lazy-load="false"
class="avatar-edit" binderror="" bindload="" />
:src="$baseUrl + 'person/icon_modify.png'"
mode="widthFix"
lazy-load="false"
binderror=""
bindload=""
/>
</view> </view>
<form @submit="onSubmit"> <form @submit="onSubmit">
<view class="person-info"> <view class="person-info">
<block <block v-for="(item, index) in formItems
v-for="(item, index) in formItems
.filter(formItemFilter) .filter(formItemFilter)
.slice( .slice(
0, 0,
formData.babyStage == 2 && pageStatus.formStatus == 2 formData.babyStage == 2 && pageStatus.formStatus == 2
? 6 ? 6
: formItems.length : formItems.length
)" )" :key="item.name">
:key="item.name" <view class="form-row" :style="{
>
<view
class="form-row"
:style="{
'border-bottom': 'border-bottom':
pageStatus.formStatus == 0 && pageStatus.formStatus == 0 &&
index == formItems.filter(formItemFilter).length - 1 index == formItems.filter(formItemFilter).length - 1
? 'none' ? 'none'
: '1rpx solid #f2f2f2', : '1rpx solid #f2f2f2',
}" }">
>
<text class="form-label"> <text class="form-label">
{{ getlabelFn(item) }} {{ getlabelFn(item) }}
<!-- {{ item.label }} --> <!-- {{ item.label }} -->
<text v-if="item.required" class="required">*</text> <text v-if="item.required" class="required">*</text>
</text> </text>
<!-- 输入框类型 --> <!-- 输入框类型 -->
<input <input v-if="item.type === 'input'" class="form-input" :name="item.name" :placeholder="item.placeholder"
v-if="item.type === 'input'" v-model="formData[item.name]" :maxlength="item.maxLength" />
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 v-else-if="item.type === 'display'" class="form-input-box">
<view class="form-input" style="color: #222">{{ <view class="form-input" style="color: #222">{{
formData[item.name] || item.placeholder formData[item.name] || item.placeholder
}}</view> }}</view>
</view> </view>
<view <view v-else-if="item.type === 'display-obj'" class="form-input-box">
v-else-if="item.type === 'display-obj'"
class="form-input-box"
>
<view class="form-input" style="color: #222">{{ <view class="form-input" style="color: #222">{{
getLabelByValue(item, formData[item.name]) getLabelByValue(item, formData[item.name])
}}</view> }}</view>
</view> </view>
<!-- 选择器类型 --> <!-- 选择器类型 -->
<picker-custom <picker-custom v-else-if="item.type === 'picker'" :mode="item.mode" :range="item.range" :value="item.mode === 'date'
v-else-if="item.type === 'picker'"
:mode="item.mode"
:range="item.range"
:value="
item.mode === 'date'
? formData[item.name] ? formData[item.name]
: getPickerIndex(item) : getPickerIndex(item)
" " :onPickerChange="(e) => onPickerChange(e, item.name)"
:onPickerChange="(e) => onPickerChange(e, item.name)" :onLayerVisibleChange="(e) => (pageStatus.btnStatus = !e)" :onStatusChange="onDateStatusChange">
:onLayerVisibleChange="(e) => (pageStatus.btnStatus = !e)"
:onStatusChange="onDateStatusChange"
>
<view class="form-input-box"> <view class="form-input-box">
<view class="form-input">{{ <view class="form-input">{{
getLabelByValue(item, formData[item.name]) || item.placeholder getLabelByValue(item, formData[item.name]) || item.placeholder
}}</view> }}</view>
<image <image class="form-input-icon" :src="$baseUrl + 'person/icon_arrow_yellow_right.png'" />
class="form-input-icon"
:src="$baseUrl + 'person/icon_arrow_yellow_right.png'"
/>
</view> </view>
</picker-custom> </picker-custom>
<!-- 多选弹窗类型 --> <!-- 多选弹窗类型 -->
<view <view v-else-if="item.type === 'multi-picker'" @click="handleMultiPickerOpen(item)">
v-else-if="item.type === 'multi-picker'"
@click="handleMultiPickerOpen(item)"
>
<view class="form-input-box"> <view class="form-input-box">
<view class="form-input"> <view class="form-input">
{{ {{
...@@ -151,52 +90,27 @@ ...@@ -151,52 +90,27 @@
item.placeholder item.placeholder
}} }}
</view> </view>
<image <image class="form-input-icon" :src="$baseUrl + 'person/icon_arrow_yellow_right.png'" />
class="form-input-icon"
:src="$baseUrl + 'person/icon_arrow_yellow_right.png'"
/>
</view> </view>
</view> </view>
<!-- 单选类型 --> <!-- 单选类型 -->
<radio-group <radio-group v-else-if="item.type === 'radio'" @change="(e) => onRadioChange(e, item.name)">
v-else-if="item.type === 'radio'" <label v-for="opt in item.options" :key="opt.value" class="form-radio">
@change="(e) => onRadioChange(e, item.name)" <radio :value="opt.value" :checked="formData[item.name] === opt.value" />
>
<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 }} {{ opt.label }}
</label> </label>
</radio-group> </radio-group>
</view> </view>
</block> </block>
<view <view v-if="formData.babyStage == 2" class="form-bottom-btn" @click="handleFormBottomBtn">
v-if="formData.babyStage == 2"
class="form-bottom-btn"
@click="handleFormBottomBtn"
>
<text class="form-bottom-text"> <text class="form-bottom-text">
{{ pageStatus.formStatus == 1 ? "收起" : "展开" }} {{ pageStatus.formStatus == 1 ? "收起" : "展开" }}
</text> </text>
<image <image v-if="pageStatus.formStatus == 1" class="form-bottom-icon"
v-if="pageStatus.formStatus == 1" :src="$baseUrl + 'person/icon_arrow_yellow_up.png'" mode="aspectFit" />
class="form-bottom-icon" <image v-else class="form-bottom-icon" :src="$baseUrl + 'person/icon_arrow_yellow_down.png'"
:src="$baseUrl + 'person/icon_arrow_yellow_up.png'" mode="aspectFit" />
mode="aspectFit"
/>
<image
v-else
class="form-bottom-icon"
:src="$baseUrl + 'person/icon_arrow_yellow_down.png'"
mode="aspectFit"
/>
</view> </view>
</view> </view>
<view class="form-bottom"></view> <view class="form-bottom"></view>
...@@ -206,18 +120,11 @@ ...@@ -206,18 +120,11 @@
</button> </button>
</form> </form>
<MultiSelectLayer <MultiSelectLayer v-if="multiPickerStatus && currentMultiPickerName" v-model="multiPickerStatus" :title="formItems.find((i) => i.name === currentMultiPickerName)?.label +
v-if="multiPickerStatus && currentMultiPickerName"
v-model="multiPickerStatus"
:title="
formItems.find((i) => i.name === currentMultiPickerName)?.label +
'(多选)' '(多选)'
" " :options="formItems.find((i) => i.name === currentMultiPickerName)?.range"
:options="formItems.find((i) => i.name === currentMultiPickerName)?.range" :modelSelected="multiPickerSelected[currentMultiPickerName]" @confirm="handleMultiPickerConfirm"
:modelSelected="multiPickerSelected[currentMultiPickerName]" @cancel="handleMultiPickerCancel" />
@confirm="handleMultiPickerConfirm"
@cancel="handleMultiPickerCancel"
/>
</view> </view>
</template> </template>
...@@ -579,6 +486,13 @@ const onSubmit = async (e) => { ...@@ -579,6 +486,13 @@ const onSubmit = async (e) => {
console.log("提交数据", data); console.log("提交数据", data);
const pregnancyStatus = babyStageMap.find((i) => i.value === formData.value.babyStage)?.label || "";
md.sensorUserLogTake({
memberid: uni.getStorageSync('memberId'),
pregnancyStatus: pregnancyStatus,
})
showLoading(); showLoading();
const res = await updateBabyInfo(data); const res = await updateBabyInfo(data);
...@@ -846,9 +760,11 @@ watch( ...@@ -846,9 +760,11 @@ watch(
<style lang="less" scoped> <style lang="less" scoped>
@import "@/common.less"; @import "@/common.less";
.person-page { .person-page {
background-color: #f6f8fa; background-color: #f6f8fa;
min-height: 100vh; min-height: 100vh;
.icon-return { .icon-return {
width: 20rpx; width: 20rpx;
height: 32rpx; height: 32rpx;
...@@ -870,6 +786,7 @@ watch( ...@@ -870,6 +786,7 @@ watch(
.person-header { .person-header {
position: relative; position: relative;
height: 463rpx; height: 463rpx;
.banner_bg { .banner_bg {
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -942,6 +859,7 @@ watch( ...@@ -942,6 +859,7 @@ watch(
position: relative; position: relative;
z-index: 2; z-index: 2;
box-sizing: border-box; box-sizing: border-box;
.form-row { .form-row {
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -958,11 +876,13 @@ watch( ...@@ -958,11 +876,13 @@ watch(
width: 250rpx; width: 250rpx;
color: #222; color: #222;
font-size: 28rpx; font-size: 28rpx;
.required { .required {
color: #b88a3a; color: #b88a3a;
margin-left: -4rpx; margin-left: -4rpx;
} }
} }
.form-input { .form-input {
flex: 1; flex: 1;
color: #6f6d67; color: #6f6d67;
...@@ -998,6 +918,7 @@ watch( ...@@ -998,6 +918,7 @@ watch(
justify-content: center; justify-content: center;
width: 100%; width: 100%;
height: 80rpx; height: 80rpx;
.form-bottom-text { .form-bottom-text {
font-size: 28rpx; font-size: 28rpx;
color: #6f6d67; color: #6f6d67;
...@@ -1015,6 +936,7 @@ watch( ...@@ -1015,6 +936,7 @@ watch(
height: 300rpx; height: 300rpx;
width: 100%; width: 100%;
} }
.form-btn { .form-btn {
width: 686rpx; width: 686rpx;
height: 94rpx; height: 94rpx;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment