Commit 0b381042 authored by spc's avatar spc

Merge branch 'xingmaLab20250820' of http://gitlab2.dui88.com/fh/20250528_FHQ1...

Merge branch 'xingmaLab20250820' of http://gitlab2.dui88.com/fh/20250528_FHQ1 into xingmaLab20250820
parents 8732221e 1e31192b
unpackage/ unpackage/
dist/ dist/
node_modules/ node_modules/
.DS_Store
\ No newline at end of file
{
"editor.semanticHighlighting.enabled": false,
"files.associations": {
"*.wxml": "html",
"*.wxss": "css",
"*.wxs": "javascript"
},
"editor.tokenColorCustomizations": {
"comments": "#9AA0A6",
"textMateRules": [
{
"scope": [
"comment",
"comment.block",
"comment.block.documentation",
"punctuation.definition.comment"
],
"settings": { "foreground": "#9AA0A6" }
},
{
"scope": [
"comment.block.html",
"punctuation.definition.comment.html",
"comment.block.vue",
"punctuation.definition.comment.vue",
"comment.block.vue-html",
"punctuation.definition.comment.vue-html",
"comment.block.xml",
"punctuation.definition.comment.xml"
],
"settings": { "foreground": "#9AA0A6" }
},
{
"scope": [
"comment.block.js",
"comment.line.double-slash.js",
"punctuation.definition.comment.js",
"comment.block.javascript",
"comment.line.double-slash.javascript",
"punctuation.definition.comment.javascript"
],
"settings": { "foreground": "#9AA0A6" }
},
{
"scope": [
"comment.block.css",
"punctuation.definition.comment.css"
],
"settings": { "foreground": "#9AA0A6" }
}
],
"[Default Dark+]": {
"comments": "#9AA0A6",
"textMateRules": [
{
"scope": [
"comment",
"comment.block",
"comment.block.documentation",
"punctuation.definition.comment",
"comment.block.html",
"punctuation.definition.comment.html",
"comment.block.vue",
"punctuation.definition.comment.vue",
"comment.block.vue-html",
"punctuation.definition.comment.vue-html",
"comment.block.xml",
"punctuation.definition.comment.xml",
"comment.block.js",
"comment.line.double-slash.js",
"punctuation.definition.comment.js",
"comment.block.javascript",
"comment.line.double-slash.javascript",
"punctuation.definition.comment.javascript",
"comment.block.css",
"punctuation.definition.comment.css"
],
"settings": { "foreground": "#9AA0A6" }
}
]
},
"[Default Light+]": {
"comments": "#80868B",
"textMateRules": [
{
"scope": [
"comment",
"comment.block",
"comment.block.documentation",
"punctuation.definition.comment",
"comment.block.html",
"punctuation.definition.comment.html",
"comment.block.vue",
"punctuation.definition.comment.vue",
"comment.block.vue-html",
"punctuation.definition.comment.vue-html",
"comment.block.xml",
"punctuation.definition.comment.xml",
"comment.block.js",
"comment.line.double-slash.js",
"punctuation.definition.comment.js",
"comment.block.javascript",
"comment.line.double-slash.javascript",
"punctuation.definition.comment.javascript",
"comment.block.css",
"punctuation.definition.comment.css"
],
"settings": { "foreground": "#80868B" }
}
]
},
"[Cursor Dark]": {
"comments": "#9AA0A6",
"textMateRules": [
{
"scope": [
"comment",
"comment.block",
"comment.block.documentation",
"punctuation.definition.comment",
"comment.block.html",
"punctuation.definition.comment.html",
"comment.block.vue",
"punctuation.definition.comment.vue",
"comment.block.vue-html",
"punctuation.definition.comment.vue-html",
"comment.block.xml",
"punctuation.definition.comment.xml",
"comment.block.js",
"comment.line.double-slash.js",
"punctuation.definition.comment.js",
"comment.block.javascript",
"comment.line.double-slash.javascript",
"punctuation.definition.comment.javascript",
"comment.block.css",
"punctuation.definition.comment.css"
],
"settings": { "foreground": "#9AA0A6" }
}
]
},
"[Cursor Light]": {
"comments": "#80868B",
"textMateRules": [
{
"scope": [
"comment",
"comment.block",
"comment.block.documentation",
"punctuation.definition.comment",
"comment.block.html",
"punctuation.definition.comment.html",
"comment.block.vue",
"punctuation.definition.comment.vue",
"comment.block.vue-html",
"punctuation.definition.comment.vue-html",
"comment.block.xml",
"punctuation.definition.comment.xml",
"comment.block.js",
"comment.line.double-slash.js",
"punctuation.definition.comment.js",
"comment.block.javascript",
"comment.line.double-slash.javascript",
"punctuation.definition.comment.javascript",
"comment.block.css",
"punctuation.definition.comment.css"
],
"settings": { "foreground": "#80868B" }
}
]
}
},
"editor.semanticTokenColorCustomizations": {
"enabled": false
}
}
...@@ -9,6 +9,7 @@ import { ...@@ -9,6 +9,7 @@ import {
//const baseUrl = 'https://feihe.jzvcode.com/feihe'; //const baseUrl = 'https://feihe.jzvcode.com/feihe';
//const baseUrl = 'https://factory-walk-test.feihe.com/feihe'; //const baseUrl = 'https://factory-walk-test.feihe.com/feihe';
const baseUrl = 'https://factory-walk.feihe.com/feihe'; const baseUrl = 'https://factory-walk.feihe.com/feihe';
//const baseUrl = 'https://factory-walk-uat.feihe.com/feihe';
const request = (options = {}) => { const request = (options = {}) => {
// 对options.data 进行一些处理 // 对options.data 进行一些处理
......
...@@ -3,21 +3,12 @@ ...@@ -3,21 +3,12 @@
<view class="popup-content" @click.stop> <view class="popup-content" @click.stop>
<!-- 喂养方式列表 --> <!-- 喂养方式列表 -->
<view class="feed-list"> <view class="feed-list">
<view <view v-for="(item, index) in feedOptions" :key="index" class="feed-item"
v-for="(item, index) in feedOptions" :class="{ selected: selectedIndex === index }" @click="selectFeed(index)">
:key="index"
class="feed-item"
:class="{ selected: selectedIndex === index }"
@click="selectFeed(index)"
>
<!-- 选中背景 --> <!-- 选中背景 -->
<image <image v-if="selectedIndex === index" class="feed-item-bg"
v-if="selectedIndex === index" :src="`${$baseUrl}shengzhangTool/1001/changeFeed/itemBg.png`" mode="aspectFit" />
class="feed-item-bg"
:src="`${$baseUrl}shengzhangTool/1001/changeFeed/itemBg.png`"
mode="aspectFit"
/>
<!-- 喂养方式文本 --> <!-- 喂养方式文本 -->
<text class="feed-text">{{ item.name }}</text> <text class="feed-text">{{ item.name }}</text>
</view> </view>
...@@ -25,30 +16,21 @@ ...@@ -25,30 +16,21 @@
<!-- 底部按钮 --> <!-- 底部按钮 -->
<view class="bottom-buttons"> <view class="bottom-buttons">
<image <image class="cancel-btn" :class="{ 'cancel-btn-active': isCancelPressed }"
class="cancel-btn"
:class="{'cancel-btn-active': isCancelPressed}"
:src="`${$baseUrl}shengzhangTool/1001/changeFeed/cancelBtn.png`" :src="`${$baseUrl}shengzhangTool/1001/changeFeed/cancelBtn.png`"
@touchstart="handleCancelTouchStart" @touchstart="handleCancelTouchStart" @touchend="handleCancelTouchEnd" mode="aspectFit" />
@touchend="handleCancelTouchEnd"
mode="aspectFit" <image class="ok-btn" :class="{ 'ok-btn-active': isOkPressed }"
/> :src="`${$baseUrl}shengzhangTool/1001/changeFeed/okBtn.png`" @touchstart="handleOkTouchStart"
@touchend="handleOkTouchEnd" mode="aspectFit" />
<image
class="ok-btn"
:class="{'ok-btn-active': isOkPressed}"
:src="`${$baseUrl}shengzhangTool/1001/changeFeed/okBtn.png`"
@touchstart="handleOkTouchStart"
@touchend="handleOkTouchEnd"
mode="aspectFit"
/>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script setup> <script setup>
import { ref, defineEmits, defineProps, onMounted } from 'vue' import { ref, defineEmits, defineProps, watch, onMounted } from 'vue'
import md from '../md.js'
const props = defineProps({ const props = defineProps({
visible: { visible: {
...@@ -90,6 +72,12 @@ const selectedFeedText = ref('母乳+奶粉混合喂养') ...@@ -90,6 +72,12 @@ const selectedFeedText = ref('母乳+奶粉混合喂养')
const selectFeed = (index) => { const selectFeed = (index) => {
selectIndex.value = index selectIndex.value = index
emit('update:selectedIndex', index) emit('update:selectedIndex', index)
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "生长曲线",
popName: "喂养方式选择弹窗",
buttonName: feedOptions.value[index].name
});
} }
// 取消按钮事件 // 取消按钮事件
...@@ -109,13 +97,19 @@ const handleOkTouchStart = () => { ...@@ -109,13 +97,19 @@ const handleOkTouchStart = () => {
const handleOkTouchEnd = () => { const handleOkTouchEnd = () => {
isOkPressed.value = false isOkPressed.value = false
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "生长曲线",
popName: "喂养方式选择弹窗",
buttonName: "确认"
});
const index = selectIndex.value const index = selectIndex.value
const selectedFeed = feedOptions.value[index] const selectedFeed = feedOptions.value[index]
// 发送事件通知主页面 // 发送事件通知主页面
emit('change', selectedFeed, index)//只能传一个参数 emit('change', selectedFeed, index)//只能传一个参数
closePopup()
closePopup("nonePop")
} }
// 点击喂养方式选择 // 点击喂养方式选择
...@@ -127,24 +121,38 @@ const openFeedSelector = () => { ...@@ -127,24 +121,38 @@ const openFeedSelector = () => {
// 处理喂养方式选择变化 // 处理喂养方式选择变化
const onFeedChange = (feedOption, index) => { const onFeedChange = (feedOption, index) => {
isLoadingFeed.value = true isLoadingFeed.value = true
console.log('选择了喂养方式:', feedOption, index) console.log('选择了喂养方式:', feedOption, index)
selectedFeedText.value = feedOption.name selectedFeedText.value = feedOption.name
currentFeedIndex.value = index currentFeedIndex.value = index
// 模拟保存数据 // 模拟保存数据
setTimeout(() => { setTimeout(() => {
isLoadingFeed.value = false isLoadingFeed.value = false
}, 300) }, 300)
} }
const closePopup = () => { const closePopup = (type) => {
if (type !== 'nonePop') {
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "生长曲线",
popName: "喂养方式选择弹窗",
buttonName: "取消"
});
}
emit('update:visible', false) emit('update:visible', false)
}
onMounted(() => {
})
watch(() => props.visible, (newVal) => {
if (newVal) {
md.sensorPopLogTake({
xcxPopExposure: "true",
toolName: "生长曲线",
popName: "喂养方式选择弹窗"
});
}
})
}
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
...@@ -173,7 +181,7 @@ onMounted(() => { ...@@ -173,7 +181,7 @@ onMounted(() => {
overflow-y: auto; overflow-y: auto;
padding-left: 30rpx; padding-left: 30rpx;
padding-right: 30rpx; padding-right: 30rpx;
.feed-item { .feed-item {
position: relative; position: relative;
display: flex; display: flex;
...@@ -183,18 +191,18 @@ onMounted(() => { ...@@ -183,18 +191,18 @@ onMounted(() => {
margin-bottom: 20rpx; margin-bottom: 20rpx;
border-radius: 16rpx; border-radius: 16rpx;
background-color: #fff; background-color: #fff;
&.selected { &.selected {
background-color: transparent; background-color: transparent;
} }
.feed-item-bg { .feed-item-bg {
position: absolute; position: absolute;
width: 689rpx; width: 689rpx;
height: 108rpx; height: 108rpx;
z-index: 1; z-index: 1;
} }
.feed-text { .feed-text {
position: relative; position: relative;
z-index: 2; z-index: 2;
...@@ -212,22 +220,22 @@ onMounted(() => { ...@@ -212,22 +220,22 @@ onMounted(() => {
padding-top: 20rpx; padding-top: 20rpx;
padding-left: 30rpx; padding-left: 30rpx;
padding-right: 30rpx; padding-right: 30rpx;
.cancel-btn { .cancel-btn {
width: 334rpx; width: 334rpx;
height: 97rpx; height: 97rpx;
transition: transform 0.1s ease-out; transition: transform 0.1s ease-out;
&.cancel-btn-active { &.cancel-btn-active {
transform: scale(0.95); transform: scale(0.95);
} }
} }
.ok-btn { .ok-btn {
width: 334rpx; width: 334rpx;
height: 97rpx; height: 97rpx;
transition: transform 0.1s ease-out; transition: transform 0.1s ease-out;
&.ok-btn-active { &.ok-btn-active {
transform: scale(0.95); transform: scale(0.95);
} }
...@@ -251,23 +259,22 @@ onMounted(() => { ...@@ -251,23 +259,22 @@ onMounted(() => {
display: flex; display: flex;
align-items: center; align-items: center;
cursor: pointer; // 添加手型光标 cursor: pointer; // 添加手型光标
.feeding-value { .feeding-value {
font-size: 28rpx; font-size: 28rpx;
color: #666; color: #666;
margin-right: 8rpx; margin-right: 8rpx;
} }
.dropdown-icon { .dropdown-icon {
width: 20rpx; width: 20rpx;
height: 20rpx; height: 20rpx;
transition: transform 0.3s ease; // 添加旋转动画 transition: transform 0.3s ease; // 添加旋转动画
} }
// 可选:添加点击反馈效果 // 可选:添加点击反馈效果
&:active { &:active {
opacity: 0.7; opacity: 0.7;
} }
} }
</style> </style>
...@@ -67,6 +67,7 @@ ...@@ -67,6 +67,7 @@
<script setup> <script setup>
import { ref, defineEmits, defineProps, onMounted } from 'vue' import { ref, defineEmits, defineProps, onMounted } from 'vue'
import { useUserStore } from "@/stores/user"; import { useUserStore } from "@/stores/user";
import md from '../md.js'
// const props = defineProps({ // const props = defineProps({
// visible: { // visible: {
...@@ -104,6 +105,12 @@ const handleOkTouchStart = () => { ...@@ -104,6 +105,12 @@ const handleOkTouchStart = () => {
} }
const handleOkTouchEnd = async () => { const handleOkTouchEnd = async () => {
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "生长曲线",
popName: "切换宝宝弹窗",
buttonName: "确认"
});
isOkPressed.value = false isOkPressed.value = false
const index = selectIndex.value; const index = selectIndex.value;
...@@ -116,11 +123,23 @@ const handleOkTouchEnd = async () => { ...@@ -116,11 +123,23 @@ const handleOkTouchEnd = async () => {
} }
const closePopup = () => { const closePopup = () => {
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "生长曲线",
popName: "切换宝宝弹窗",
buttonName: "关闭"
});
emit('update:visible', false) emit('update:visible', false)
} }
const selectIndex = ref(0) const selectIndex = ref(0)
const selectBaby = (index) => { const selectBaby = (index) => {
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "生长曲线",
popName: "切换宝宝弹窗",
buttonName: "宝宝列表"
});
selectIndex.value = index; selectIndex.value = index;
emit('update:selectedIndex', index); emit('update:selectedIndex', index);
} }
...@@ -135,6 +154,11 @@ onMounted(() => { ...@@ -135,6 +154,11 @@ onMounted(() => {
const selectedIndexInList = babyList.value.findIndex(item => item.selected === true) const selectedIndexInList = babyList.value.findIndex(item => item.selected === true)
console.log('选中宝宝的索引:', selectedIndexInList) console.log('选中宝宝的索引:', selectedIndexInList)
selectIndex.value = selectedIndexInList; selectIndex.value = selectedIndexInList;
md.sensorPopLogTake({
xcxPopExposure: "true",
toolName: "生长曲线",
popName: "切换宝宝弹窗"
});
}) })
......
...@@ -27,7 +27,8 @@ ...@@ -27,7 +27,8 @@
</template> </template>
<script setup> <script setup>
import { ref, defineEmits, defineProps } from 'vue' import { ref, defineEmits, defineProps,watch } from 'vue'
import md from '../md.js'
const props = defineProps({ const props = defineProps({
visible: { visible: {
...@@ -67,11 +68,27 @@ const handleOkTouchStart = () => { ...@@ -67,11 +68,27 @@ const handleOkTouchStart = () => {
const handleOkTouchEnd = () => { const handleOkTouchEnd = () => {
isOkPressed.value = false isOkPressed.value = false
closePopup() closePopup()
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "生长曲线",
popName: "测量方式提示弹窗",
buttonName: "我知道了"
});
} }
const closePopup = () => { const closePopup = () => {
emit('update:visible', false) emit('update:visible', false)
} }
watch(() => props.visible, (newVal) => {
if (newVal) {
md.sensorPopLogTake({
xcxPopExposure: "true",
toolName: "生长曲线",
popName: "测量方式提示弹窗"
});
}
})
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
......
...@@ -65,7 +65,8 @@ ...@@ -65,7 +65,8 @@
</template> </template>
<script setup> <script setup>
import { ref, defineEmits, defineProps, watch, computed } from 'vue' import { ref, defineEmits, defineProps, watch, computed,onMounted } from 'vue'
import md from '../md.js'
const props = defineProps({ const props = defineProps({
visible: { visible: {
...@@ -107,6 +108,9 @@ const yearRange = computed(() => { ...@@ -107,6 +108,9 @@ const yearRange = computed(() => {
return yearRange return yearRange
}) })
onMounted(() => {
})
// 生成月份范围 (1-12) // 生成月份范围 (1-12)
const monthRange = computed(() => { const monthRange = computed(() => {
...@@ -252,6 +256,12 @@ const handleOkTouchEnd = () => { ...@@ -252,6 +256,12 @@ const handleOkTouchEnd = () => {
} }
const closePopup = () => { const closePopup = () => {
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "生长曲线",
popName: "选择本次测评日期弹窗",
buttonName: "关闭"
});
// 格式化日期为 YYYY-MM-DD // 格式化日期为 YYYY-MM-DD
const year = currentDate.value.getFullYear() const year = currentDate.value.getFullYear()
const month = String(currentDate.value.getMonth() + 1).padStart(2, '0') const month = String(currentDate.value.getMonth() + 1).padStart(2, '0')
......
...@@ -111,9 +111,9 @@ ...@@ -111,9 +111,9 @@
</template> </template>
<script setup> <script setup>
import { getCurrentInstance } from 'vue' import { getCurrentInstance,onMounted,computed } from 'vue'
import { BABY_CLASS_IMAGES } from './babyClassImages.js' import { BABY_CLASS_IMAGES } from './babyClassImages.js'
import { computed } from 'vue' import md from '../../md.js'
// 获取全局属性 // 获取全局属性
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
...@@ -144,7 +144,15 @@ const getColor = () => { ...@@ -144,7 +144,15 @@ const getColor = () => {
] ]
return colors[props.currentLevel]; return colors[props.currentLevel];
} }
onMounted(() => {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "育儿课程-查看育儿课程"
});
})
// 等级映射常量 // 等级映射常量
const LEVEL_MAP = { const LEVEL_MAP = {
...@@ -165,6 +173,12 @@ const userLevelName = computed(() => LEVEL_MAP[props.userLevel]) ...@@ -165,6 +173,12 @@ const userLevelName = computed(() => LEVEL_MAP[props.userLevel])
const jump = (level) => { const jump = (level) => {
console.log(`跳转到 ${level} 等级页面`) console.log(`跳转到 ${level} 等级页面`)
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "育儿课程-查看育儿课程"
});
// 检查用户等级是否符合要求 // 检查用户等级是否符合要求
// const levelOrder = [0, 1, 2, 3, 4]; // gold, platinum, diamond, starlight, starshine // const levelOrder = [0, 1, 2, 3, 4]; // gold, platinum, diamond, starlight, starshine
// const userLevelIndex = levelOrder.indexOf(props.userLevel); // const userLevelIndex = levelOrder.indexOf(props.userLevel);
......
...@@ -481,6 +481,7 @@ import { getCurrentInstance, reactive, computed, onMounted, watch, onUnmounted } ...@@ -481,6 +481,7 @@ import { getCurrentInstance, reactive, computed, onMounted, watch, onUnmounted }
import { MONTH_GIFT_IMAGES } from './monthGiftImages.js' import { MONTH_GIFT_IMAGES } from './monthGiftImages.js'
import { monthlyGiftIndex, monthlyGiftDrawOne, monthlyGiftDrawAll } from '../../api/monthGift.js' import { monthlyGiftIndex, monthlyGiftDrawOne, monthlyGiftDrawAll } from '../../api/monthGift.js'
import { jump } from '../../utils/index.js' import { jump } from '../../utils/index.js'
import md from '../../md.js'
// import popupJingxuan from '../popup-jingxuan/popup-jingxuan.vue' // import popupJingxuan from '../popup-jingxuan/popup-jingxuan.vue'
// 获取全局属性 // 获取全局属性
...@@ -609,6 +610,12 @@ const closeJingxuanPopup = () => { ...@@ -609,6 +610,12 @@ const closeJingxuanPopup = () => {
} }
const handleCouponClick = async (level) => { const handleCouponClick = async (level) => {
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "月月礼-"+getCouponButtonText(currentLevelName.value)
});
console.log("handleCouponClick level:", level, "state.couponStatus:", state.couponStatus) console.log("handleCouponClick level:", level, "state.couponStatus:", state.couponStatus)
if (state.couponStatus[level] === 'used') { if (state.couponStatus[level] === 'used') {
...@@ -654,6 +661,12 @@ const handleCouponClick = async (level) => { ...@@ -654,6 +661,12 @@ const handleCouponClick = async (level) => {
} }
const handleBuyClick = async (level) => { const handleBuyClick = async (level) => {
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "月月礼-" +getBuyButtonText(currentLevelName.value)
});
console.log(`Clicked buy for ${level}`) console.log(`Clicked buy for ${level}`)
// 检查用户等级是否符合领取条件(优先级最高) // 检查用户等级是否符合领取条件(优先级最高)
...@@ -755,6 +768,12 @@ const handleBuyClick = async (level) => { ...@@ -755,6 +768,12 @@ const handleBuyClick = async (level) => {
const switchTimeSlot = (index) => { const switchTimeSlot = (index) => {
state.selectedTimeSlot = index state.selectedTimeSlot = index
console.log(`切换到时间段: ${state.timeSlots[index].time}`) console.log(`切换到时间段: ${state.timeSlots[index].time}`)
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "月月礼-" + state.timeSlots[state.selectedTimeSlot].time+"-"+getBuyButtonText(currentLevelName.value)
});
} }
// 获取精选好券按钮文本 // 获取精选好券按钮文本
...@@ -974,10 +993,28 @@ onUnmounted(() => { ...@@ -974,10 +993,28 @@ onUnmounted(() => {
} }
}) })
const initExposure = () => {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "月月礼-" + state.timeSlots[state.selectedTimeSlot].time+"-"+getBuyButtonText(currentLevelName.value)
});
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "月月礼-"+getCouponButtonText(currentLevelName.value)
});
}
// 初始化 // 初始化
onMounted(async () => { onMounted(async () => {
console.log('MonthGift component mounted, current level:', props.currentLevel, props.userLevel) console.log('MonthGift component mounted, current level:', props.currentLevel, props.userLevel)
await fetchMonthlyGiftData() await fetchMonthlyGiftData()
initExposure();
}) })
// 调试函数:打印当前状态 // 调试函数:打印当前状态
......
...@@ -144,8 +144,9 @@ ...@@ -144,8 +144,9 @@
</template> </template>
<script setup> <script setup>
import { getCurrentInstance, computed } from 'vue' import { getCurrentInstance, computed,onMounted } from 'vue'
import { YEAR_GIFT_IMAGES } from './yearGiftImages.js' import { YEAR_GIFT_IMAGES } from './yearGiftImages.js'
import md from '../../md.js'
// 获取全局属性 // 获取全局属性
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
...@@ -199,9 +200,22 @@ const buttonInfo = computed(() => { ...@@ -199,9 +200,22 @@ const buttonInfo = computed(() => {
}; };
} }
}) })
onMounted(() => {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "周岁礼-"+buttonInfo.value.text
});
})
// 按钮点击事件处理 // 按钮点击事件处理
const handleButtonClick = () => { const handleButtonClick = () => {
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "周岁礼-"+buttonInfo.value.text
});
if (buttonInfo.value.action === 'upgrade') { if (buttonInfo.value.action === 'upgrade') {
// 跳转到升级页面 // 跳转到升级页面
uni.navigateTo({ uni.navigateTo({
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
mode="aspectFit" mode="aspectFit"
@click="handleUpgrade" @click="handleUpgrade"
> >
<text class="bottom-button-text" :style="{ color: props.index == 4 ? '#ffffff' : '#ffe3c3' }">去升级</text> <text class="bottom-button-text" :style="{ color: '#ffffff'}">去升级</text>
</view> </view>
<!-- 说明文字 --> <!-- 说明文字 -->
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
<script setup> <script setup>
import { defineProps, defineEmits, onMounted } from 'vue' import { defineProps, defineEmits, onMounted } from 'vue'
import md from '../../md.js'
// 定义组件名称 // 定义组件名称
defineOptions({ defineOptions({
...@@ -105,6 +106,12 @@ const isShowBtn = () => { ...@@ -105,6 +106,12 @@ const isShowBtn = () => {
} }
onMounted(() => { onMounted(() => {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "爱本新人礼-去升级"
});
console.log('props.isshowLocksdfsdfsdfsdsf===', props.isshowLock) console.log('props.isshowLocksdfsdfsdfsdsf===', props.isshowLock)
}) })
...@@ -113,6 +120,12 @@ const emit = defineEmits(['upgrade']) ...@@ -113,6 +120,12 @@ const emit = defineEmits(['upgrade'])
// 去升级按钮点击 // 去升级按钮点击
const handleUpgrade = () => { const handleUpgrade = () => {
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "爱本新人礼-去升级"
});
emit('upgrade', { emit('upgrade', {
index: props.index index: props.index
}) })
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
mode="aspectFit" mode="aspectFit"
@click="handleUpgrade" @click="handleUpgrade"
> >
<text class="bottom-button-text" :style="{ color: props.index == 4 ? '#ffffff' : '#ffe3c3' }">去升级</text> <text class="bottom-button-text" :style="{ color: '#ffffff'}">去升级</text>
</view> </view>
<!-- 说明文字 --> <!-- 说明文字 -->
<view class="description" :style="{ marginTop: getTop() }"> <view class="description" :style="{ marginTop: getTop() }">
...@@ -44,13 +44,24 @@ ...@@ -44,13 +44,24 @@
</template> </template>
<script setup> <script setup>
import { defineProps, defineEmits } from 'vue' import { defineProps, defineEmits,onMounted } from 'vue'
import md from '../../md.js'
// 定义组件名称 // 定义组件名称
defineOptions({ defineOptions({
name: 'jinjili' name: 'jinjili'
}) })
onMounted(() => {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "晋级礼-去升级"
});
})
const getBgName = () => { const getBgName = () => {
if(props.isshowLock){ if(props.isshowLock){
return props.index + "" return props.index + ""
...@@ -94,6 +105,12 @@ const emit = defineEmits(['upgrade']) ...@@ -94,6 +105,12 @@ const emit = defineEmits(['upgrade'])
// 去升级按钮点击 // 去升级按钮点击
const handleUpgrade = () => { const handleUpgrade = () => {
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "晋级礼-去升级"
});
emit('upgrade', { emit('upgrade', {
index: props.index index: props.index
}) })
......
...@@ -8,13 +8,23 @@ ...@@ -8,13 +8,23 @@
</view> </view>
<!-- 底部按钮 --> <!-- 底部按钮 -->
<image <!-- <image
class="bottom-button" class="bottom-button"
:src="$baseUrl + `integral/1021/mianfeiwenzhenQushiyongBtn${props.index}.png`" :src="$baseUrl + `integral/1021/mianfeiwenzhenQushiyongBtn${props.index}.png`"
mode="aspectFit" mode="aspectFit"
@click="handleUseNow" @click="handleUseNow"
/> /> -->
<view
class="bottom-button"
:style="{
background: `url(${$baseUrl}integral/1021/shengriliBtnBg${props.index}.png) no-repeat center/contain`
}"
mode="aspectFit"
@click="handleUseNow"
>
<text class="bottom-button-text">立即使用</text>
</view>
<!-- 说明文字 --> <!-- 说明文字 -->
<view class="description"> <view class="description">
<text class="desc-text" :style="{ color: getColor()[props.index].titleDetail }"> <text class="desc-text" :style="{ color: getColor()[props.index].titleDetail }">
...@@ -25,7 +35,8 @@ ...@@ -25,7 +35,8 @@
</template> </template>
<script setup> <script setup>
import { defineProps, defineEmits } from 'vue' import { defineProps, defineEmits,onMounted } from 'vue'
import md from '../../md.js'
// 定义组件名称 // 定义组件名称
defineOptions({ defineOptions({
...@@ -40,6 +51,14 @@ const props = defineProps({ ...@@ -40,6 +51,14 @@ const props = defineProps({
} }
}) })
onMounted(() => {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "免费问诊-立即使用"
});
})
// 定义组件事件 // 定义组件事件
const emit = defineEmits(['doctor-click', 'use-now']) const emit = defineEmits(['doctor-click', 'use-now'])
...@@ -52,9 +71,16 @@ const handleDoctorGridClick = () => { ...@@ -52,9 +71,16 @@ const handleDoctorGridClick = () => {
// 立即使用按钮点击 // 立即使用按钮点击
const handleUseNow = () => { const handleUseNow = () => {
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "免费问诊-立即使用"
});
emit('use-now', { emit('use-now', {
index: props.index index: props.index
}) })
} }
// 颜色配置 // 颜色配置
...@@ -110,11 +136,27 @@ const getColor = () => { ...@@ -110,11 +136,27 @@ const getColor = () => {
} }
} }
// .bottom-button {
// width: 442rpx;
// height: 86rpx;
// margin: 0 auto;
// margin-top: 470rpx;
// }
.bottom-button { .bottom-button {
width: 442rpx; width: 442rpx;
height: 86rpx; height: 86rpx;
margin: 0 auto; margin: 0 auto;
margin-top: 470rpx; margin-top: 470rpx;
display: flex;
justify-content: center;
align-items: center;
.bottom-button-text {
font-size: 26rpx;
color: #ffffff;
font-weight: bold;
}
} }
.description { .description {
......
...@@ -44,7 +44,7 @@ ...@@ -44,7 +44,7 @@
mode="aspectFit" mode="aspectFit"
@click="handleUpgrade" @click="handleUpgrade"
> >
<text class="bottom-button-text" :style="{ color: props.index == 4 ? '#ffffff' : '#ffe3c3' }">{{ getBtnName() }}</text> <text class="bottom-button-text" :style="{ color: '#ffffff' }">{{ getBtnName() }}</text>
</view> </view>
...@@ -62,6 +62,7 @@ ...@@ -62,6 +62,7 @@
import { defineProps, defineEmits, onMounted, ref } from 'vue' import { defineProps, defineEmits, onMounted, ref } from 'vue'
import { showLoading, hideLoading } from '../../utils' import { showLoading, hideLoading } from '../../utils'
import { fetchBirthdayGiftJSON } from '../../api/integral' import { fetchBirthdayGiftJSON } from '../../api/integral'
import md from '../../md.js'
import { useUserStore } from "../../stores/user"; import { useUserStore } from "../../stores/user";
...@@ -146,7 +147,12 @@ const handleUpgrade = async () => { ...@@ -146,7 +147,12 @@ const handleUpgrade = async () => {
index: status1.value, index: status1.value,
userStore:useUserStore() userStore:useUserStore()
}) })
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "生日礼-"+getBtnName()
});
} }
// 待开启按钮点击 // 待开启按钮点击
...@@ -183,7 +189,7 @@ const status1 = ref(0); ...@@ -183,7 +189,7 @@ const status1 = ref(0);
const hasBaby = ref(false); const hasBaby = ref(false);
const islogin = ref(true); const islogin = ref(true);
onMounted(async () => { onMounted(async () => {
const userStore = useUserStore(); const userStore = useUserStore();
const memberInfo = userStore.memberInfo; const memberInfo = userStore.memberInfo;
...@@ -218,6 +224,12 @@ onMounted(async () => { ...@@ -218,6 +224,12 @@ onMounted(async () => {
} }
console.log('data', data); console.log('data', data);
hideLoading(); hideLoading();
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "生日礼-"+getBtnName()
});
}) })
......
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
import { defineProps, defineEmits, ref, onMounted } from 'vue' import { defineProps, defineEmits, ref, onMounted } from 'vue'
import { showLoading, hideLoading } from '../../utils'; import { showLoading, hideLoading } from '../../utils';
import { fetchActivityStateJSON } from '../../api/integral'; import { fetchActivityStateJSON } from '../../api/integral';
import md from '../../md.js'
const handleUpgrade_daikaiqi = () => { const handleUpgrade_daikaiqi = () => {
uni.showToast({ uni.showToast({
title: '活动暂未开启', title: '活动暂未开启',
...@@ -97,6 +97,12 @@ const emit = defineEmits(['upgrade']) ...@@ -97,6 +97,12 @@ const emit = defineEmits(['upgrade'])
// 去升级按钮点击 // 去升级按钮点击
const handleUpgrade = () => { const handleUpgrade = () => {
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "溯源游-"+(props.isshowLock ? '去升级' : '立即报名')
});
emit('upgrade', { emit('upgrade', {
index: props.index index: props.index
}) })
...@@ -148,6 +154,13 @@ onMounted(async () => { ...@@ -148,6 +154,13 @@ onMounted(async () => {
} }
hideLoading(); hideLoading();
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "溯源游-"+(props.isshowLock ? '去升级' : '立即报名')
});
}) })
</script> </script>
...@@ -200,7 +213,7 @@ onMounted(async () => { ...@@ -200,7 +213,7 @@ onMounted(async () => {
.bottom-button-text { .bottom-button-text {
font-size: 26rpx; font-size: 26rpx;
color: #ffe3c3; color: #ffffff;
font-weight: bold; font-weight: bold;
} }
} }
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
mode="aspectFit" mode="aspectFit"
@click="handleUpgrade" @click="handleUpgrade"
> >
<text class="bottom-button-text" :style="{ color: props.index == 4 ? '#ffffff' : '#ffe3c3' }">去升级</text> <text class="bottom-button-text" :style="{ color:'#ffffff'}">去升级</text>
</view> </view>
<!-- 说明文字 --> <!-- 说明文字 -->
...@@ -46,7 +46,8 @@ ...@@ -46,7 +46,8 @@
</template> </template>
<script setup> <script setup>
import { defineProps, defineEmits } from 'vue' import { defineProps, defineEmits,onMounted } from 'vue'
import md from '../../md.js'
// 定义组件名称 // 定义组件名称
defineOptions({ defineOptions({
...@@ -66,6 +67,16 @@ const props = defineProps({ ...@@ -66,6 +67,16 @@ const props = defineProps({
} }
}) })
onMounted(() => {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "转段礼-去升级"
});
})
const getBgName = () => { const getBgName = () => {
if(props.isshowLock){ if(props.isshowLock){
return props.index + "" return props.index + ""
...@@ -96,6 +107,12 @@ const emit = defineEmits(['upgrade']) ...@@ -96,6 +107,12 @@ const emit = defineEmits(['upgrade'])
// 去升级按钮点击 // 去升级按钮点击
const handleUpgrade = () => { const handleUpgrade = () => {
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "转段礼-去升级"
});
emit('upgrade', { emit('upgrade', {
index: props.index index: props.index
}) })
......
...@@ -25,7 +25,8 @@ ...@@ -25,7 +25,8 @@
</template> </template>
<script setup> <script setup>
import { defineProps, defineEmits } from 'vue' import { defineProps, defineEmits,watch } from 'vue'
import md from '../md.js'
// 定义props // 定义props
const props = defineProps({ const props = defineProps({
...@@ -40,8 +41,24 @@ const emit = defineEmits(['close']) ...@@ -40,8 +41,24 @@ const emit = defineEmits(['close'])
// 关闭弹窗 // 关闭弹窗
const closePopup = () => { const closePopup = () => {
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "生长曲线",
popName: "生长曲线介绍弹窗",
buttonName: "我知道了"
});
emit('close') emit('close')
} }
watch(() => props.visible, (newVal) => {
if (newVal) {
md.sensorPopLogTake({
xcxPopExposure: "true",
toolName: "生长曲线",
popName: "生长曲线介绍弹窗"
});
}
})
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
......
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
"quickapp" : {}, "quickapp" : {},
/* 小程序特有相关 */ /* 小程序特有相关 */
"mp-weixin" : { "mp-weixin" : {
"appid" : "wx88ab296d52e9835d", "appid" : "wxc83b55d61c7fc51d",
"setting" : { "setting" : {
"urlCheck" : false, "urlCheck" : false,
"minified" : true, "minified" : true,
...@@ -65,7 +65,8 @@ ...@@ -65,7 +65,8 @@
"desc" : "请允许获取位置信息,用于提供附近服务" "desc" : "请允许获取位置信息,用于提供附近服务"
} }
}, },
"requiredBackgroundModes": ["share"] "requiredBackgroundModes" : [ "share" ],
"embeddedAppIdList": ["wx4205ec55b793245e"]
}, },
"mp-alipay" : { "mp-alipay" : {
"usingComponents" : true "usingComponents" : true
......
...@@ -62,13 +62,13 @@ const sensorLog = (evt) => { ...@@ -62,13 +62,13 @@ const sensorLog = (evt) => {
trackObj[key] = logObj[key]; trackObj[key] = logObj[key];
} }
if (xcxPage && xcxPage.length > 0) { if (xcxPage && xcxPage.length > 0) {
console.warn("xcxPage", trackObj); // console.warn("xcxPage", trackObj);
sensors.track("xcxPage", { sensors.track("xcxPage", {
...trackObj, ...trackObj,
}); });
} }
if (xcxClick && xcxClick.length > 0) { if (xcxClick && xcxClick.length > 0) {
console.warn("xcxClick", trackObj); // console.warn("xcxClick", trackObj);
sensors.track("xcxClick", { sensors.track("xcxClick", {
...trackObj, ...trackObj,
}); });
...@@ -91,10 +91,101 @@ const sensorLogTake = (logObj) => { ...@@ -91,10 +91,101 @@ const sensorLogTake = (logObj) => {
}; };
sensorLog(evt); sensorLog(evt);
}; };
const sensorComponentLog = (evt) => {
const _dataset = evt.currentTarget.dataset;
const logObj = _dataset.comlog;
if (!logObj) {
return;
}
const { xcxComponentExposure, xcxComponentClick } = logObj;
let trackObj = {};
for (let key in logObj) {
trackObj[key] = logObj[key];
}
if (xcxComponentExposure && xcxComponentExposure.length > 0) {
// console.warn("-----xcxComponentExposure-----", trackObj);
sensors.track("xcxComponentExposure", {
...trackObj,
});
}
if (xcxComponentClick && xcxComponentClick.length > 0) {
// console.warn("-----xcxComponentClick-----", trackObj);
sensors.track("xcxComponentClick", {
...trackObj,
});
}
};
/**
* 主动通过配置数据触发埋点
* @param {*} evt
*/
const sensorComponentLogTake = (logObj) => {
if (!logObj) {
return;
}
const evt = {
currentTarget: {
dataset: {
comlog: logObj,
},
},
};
sensorComponentLog(evt);
};
const sensorPopLog = (evt) => {
const _dataset = evt.currentTarget.dataset;
const logObj = _dataset.poplog;
if (!logObj) {
return;
}
const { xcxPopExposure, xcxPopClick } = logObj;
let trackObj = {};
for (let key in logObj) {
trackObj[key] = logObj[key];
}
if (xcxPopExposure && xcxPopExposure.length > 0) {
// console.warn("-----xcxPopExposure-----", trackObj);
sensors.track("xcxPopExposure", {
...trackObj,
});
}
if (xcxPopClick && xcxPopClick.length > 0) {
// console.warn("-----xcxPopClick-----", trackObj);
sensors.track("xcxPopClick", {
...trackObj,
});
}
};
/**
* 主动通过配置数据触发埋点
* @param {*} evt
*/
const sensorPopLogTake = (logObj) => {
if (!logObj) {
return;
}
const evt = {
currentTarget: {
dataset: {
poplog: logObj,
},
},
};
sensorPopLog(evt);
};
export default { export default {
init, init,
sensors, sensors,
login, login,
sensorLog, sensorLog,
sensorLogTake, sensorLogTake,
sensorComponentLog,
sensorComponentLogTake,
sensorPopLog,
sensorPopLogTake,
}; };
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
{ {
"videoUrl": "https://course.feihe.com/momclub-picture/brandpage/bannerVideo.mp4", "videoUrl": "https://course.feihe.com/momclub-picture/brandpage/bannerVideo.mp4",
"link": {}, "link": {},
"title": "北纬47°黄金种植带",
"url": "brandpage/Banner41.png" "url": "brandpage/Banner41.png"
}, },
{ {
...@@ -11,14 +12,16 @@ ...@@ -11,14 +12,16 @@
"type": 3, "type": 3,
"url": "https://mp.weixin.qq.com/s/0eMxbWB3R_0g06HZPUEj5Q" "url": "https://mp.weixin.qq.com/s/0eMxbWB3R_0g06HZPUEj5Q"
}, },
"title": "飞鹤自由牧场",
"url": "brandpage/Banner42.png" "url": "brandpage/Banner42.png"
}, },
{ {
"link": { "link": {
"extra": {}, "extra": {},
"type": 3, "type": 1,
"url": "https://factory.feihe.com/user/#/web" "url": "/reservation/home/index"
}, },
"title": "飞鹤哈尔滨智能产业园",
"url": "brandpage/Banner44.png" "url": "brandpage/Banner44.png"
} }
], ],
...@@ -26,7 +29,8 @@ ...@@ -26,7 +29,8 @@
"finderUserName": "", "finderUserName": "",
"videoUrl": "brandpage/videoChannel/video2Channel/V1/1.mp4", "videoUrl": "brandpage/videoChannel/video2Channel/V1/1.mp4",
"posterUrl": "", "posterUrl": "",
"feedId": "" "feedId": "",
"title": "品牌故事视频2"
}, },
"product": [ "product": [
[ [
...@@ -477,9 +481,13 @@ ...@@ -477,9 +481,13 @@
"videoUrl": "https://course.feihe.com/momclub-picture/brandpage/banner_1%E6%85%A2%E4%BA%BA%E8%8A%82x%E9%A3%9E%E9%B9%A4%2B-%2B%E5%9C%9FFINAL.mp4", "videoUrl": "https://course.feihe.com/momclub-picture/brandpage/banner_1%E6%85%A2%E4%BA%BA%E8%8A%82x%E9%A3%9E%E9%B9%A4%2B-%2B%E5%9C%9FFINAL.mp4",
"erqiPeizhi": { "erqiPeizhi": {
"ipImg4": "https://course.feihe.com/momclub-picture/brandpage/ip4.png", "ipImg4": "https://course.feihe.com/momclub-picture/brandpage/ip4.png",
"ipTitle3": "视频号",
"title1": "飞鹤产品家族", "title1": "飞鹤产品家族",
"ipTitle4": "小红书",
"title2": "飞鹤品牌IP鹤小飞一家", "title2": "飞鹤品牌IP鹤小飞一家",
"ipTitle1": "毛绒可爱发夹",
"title3": "飞鹤ESG", "title3": "飞鹤ESG",
"ipTitle2": "大容量吨吨桶水杯",
"iphexiaofeiUrl": "https://course.feihe.com/momclub-picture/brandpage/v1_iphexiaofei.png", "iphexiaofeiUrl": "https://course.feihe.com/momclub-picture/brandpage/v1_iphexiaofei.png",
"ipImg1": "https://course.feihe.com/momclub-picture/brandpage/v1_ip1.png", "ipImg1": "https://course.feihe.com/momclub-picture/brandpage/v1_ip1.png",
"ipImg3": "https://course.feihe.com/momclub-picture/brandpage/ip3.png", "ipImg3": "https://course.feihe.com/momclub-picture/brandpage/ip3.png",
...@@ -489,7 +497,8 @@ ...@@ -489,7 +497,8 @@
"finderUserName": "sphgexisAi0pRGm", "finderUserName": "sphgexisAi0pRGm",
"videoUrl": "brandpage/videoChannel/video1Channel/V2/1.mp4", "videoUrl": "brandpage/videoChannel/video1Channel/V2/1.mp4",
"posterUrl": "", "posterUrl": "",
"feedId": "export/UzFfAgtgekIEAQAAAAAABbEMmxr36QAAAAstQy6ubaLX4KHWvLEZgBPEgaJkYSYbLr6JzNPgMJp7tTZCYcYsIpU6Z0fgSnSE" "feedId": "export/UzFfAgtgekIEAQAAAAAABbEMmxr36QAAAAstQy6ubaLX4KHWvLEZgBPEgaJkYSYbLr6JzNPgMJp7tTZCYcYsIpU6Z0fgSnSE",
"title": "品牌故事视频1"
}, },
"esgInfoList": [ "esgInfoList": [
[ [
......
{ {
"contentImgList": [ "contentImgList": [{
{ "videoUrl": "https://course.feihe.com/momclub-picture/homepage/4-0%E5%AE%98%E7%BD%91%E8%A7%86%E9%A2%91.mp4",
"videoUrl": "https://course.feihe.com/momclub-picture/homepage/4-0%E5%AE%98%E7%BD%91%E8%A7%86%E9%A2%91.mp4", "_style": "width:311rpx;height: 324rpx;left: 40rpx;top: 0;",
"_style": "width:311rpx;height: 324rpx;left: 40rpx;top: 0;", "link": "www.baidu.com",
"link": "www.baidu.com", "bgUrl": "homepage/content_1.png"
"bgUrl": "homepage/content_1.png" }, {
}, "videoUrl": "https://course.feihe.com/momclub-picture/homepage/%E9%A6%96%E9%A1%B5_2%E9%A3%9E%E9%B9%A4%E8%BF%9E%E7%BB%AD%E4%BA%94%E5%B9%B4%E5%A5%B6%E7%B2%89%E7%AC%AC%E4%B8%80.mp4",
{ "_style": "width:263rpx;height: 324rpx;right: 40rpx;top: 400rpx;",
"videoUrl": "https://course.feihe.com/momclub-picture/homepage/%E9%A6%96%E9%A1%B5_2%E9%A3%9E%E9%B9%A4%E8%BF%9E%E7%BB%AD%E4%BA%94%E5%B9%B4%E5%A5%B6%E7%B2%89%E7%AC%AC%E4%B8%80.mp4", "link": "www.baidu.com",
"_style": "width:263rpx;height: 324rpx;right: 40rpx;top: 400rpx;", "bgUrl": "homepage/content_2.png"
"link": "www.baidu.com", }, {
"bgUrl": "homepage/content_2.png" "videoUrl": "https://course.feihe.com/momclub-picture/homepage/%E9%A6%96%E9%A1%B5_3%E3%80%909%E6%9C%8827%E6%97%A5%E3%80%91%E9%A3%9E%E9%B9%A4_%E4%B8%96%E7%95%8C%E6%97%85%E6%B8%B8%E6%97%A5.mp4",
}, "_style": "width:418rpx;height: 345rpx;left: 40rpx;top: 750rpx;",
{ "link": "www.baidu.com",
"videoUrl": "https://course.feihe.com/momclub-picture/homepage/%E9%A6%96%E9%A1%B5_3%E3%80%909%E6%9C%8827%E6%97%A5%E3%80%91%E9%A3%9E%E9%B9%A4_%E4%B8%96%E7%95%8C%E6%97%85%E6%B8%B8%E6%97%A5.mp4", "bgUrl": "homepage/content_3.png"
"_style": "width:418rpx;height: 345rpx;left: 40rpx;top: 750rpx;", }, {
"link": "www.baidu.com", "_style": "width:263rpx;height: 324rpx;right: 40rpx;top: 1120rpx;",
"bgUrl": "homepage/content_3.png" "link": {
}, "extra": {},
{ "type": 3,
"_style": "width:263rpx;height: 324rpx;right: 40rpx;top: 1120rpx;", "url": "https://mp.weixin.qq.com/s/HhBF5h8xX8zOrthsy2-Y-A"
"link": { },
"extra": {}, "bgUrl": "homepage/content_4.png"
"type": 3, }],
"url": "https://mp.weixin.qq.com/s/HhBF5h8xX8zOrthsy2-Y-A" "toolList": {
}, "maintitle": "工具推荐",
"bgUrl": "homepage/content_4.png" "jtIcon": "homepage/tool_jt.png",
} "subtitle": "更多妈妈都在用,告别手忙脚乱,助你轻松带娃!",
], "tools": [{
"toolList": { "icon": "homepage/tool_icon_2.png",
"maintitle": "工具推荐", "link": {
"jtIcon": "homepage/tool_jt.png", "extra": {},
"subtitle": "更多妈妈都在用,告别手忙脚乱,助你轻松带娃!", "type": 1,
"tools": [ "url": "/pages/feedingIndex/feedingIndex"
{ },
"icon": "homepage/tool_icon_1.png", "context": "一键更新喂养记录",
"link": { "type": 1,
"extra": {}, "title": "喂养工具"
"type": 1, }, {
"url": "/pages/naming/naming" "icon": "homepage/tool_icon_3.png",
}, "link": {
"context": "AI生成吉利好名", "extra": {},
"type": 1, "type": 1,
"title": "AI起名" "url": "/pages/postnatalCheckUp/postnatalCheckUp"
}, },
{ "context": "孕周检查准时告知",
"icon": "homepage/tool_icon_2.png", "type": 1,
"link": { "title": "产检提醒"
"extra": {}, }, {
"type": 1, "icon": "homepage/tool_icon_4.png",
"url": "/pages/feedingIndex/feedingIndex" "link": {
}, "extra": {},
"context": "一键更新喂养记录", "type": 1,
"type": 1, "url": "/pages/shengzhangTools/shengzhangTools"
"title": "喂养工具" },
}, "context": "发育偏离预警早报",
{ "type": 1,
"icon": "homepage/tool_icon_3.png", "title": "宝宝生长测评"
"link": { }, {
"extra": {}, "icon": "homepage/tool_icon_6.png",
"type": 1, "link": {
"url": "/pages/postnatalCheckUp/postnatalCheckUp" "extra": {},
}, "type": 3,
"context": "孕周检查准时告知", "url": "https://ali.xudankeji.com/play/rCeXjMai"
"type": 1, },
"title": "产检提醒" "context": "测体质选奶粉",
}, "type": 1,
{ "title": "体质测试"
"icon": "homepage/tool_icon_4.png", }, {
"link": { "icon": "homepage/tool_icon_1.png",
"extra": {}, "link": {
"type": 1, "extra": {},
"url": "/pages/shengzhangTools/shengzhangTools" "type": 1,
}, "url": "/pages/naming/naming"
"context": "发育偏离预警早报", },
"type": 1, "context": "AI生成吉利好名",
"title": "宝宝生长测评" "type": 1,
} "title": "星妈起名"
], }],
"bgUrl": "homepage/toolBg.png" "bgUrl": "homepage/toolBg.png"
}, },
"suggest": { "suggest": {
"link": { "link": {
"type": 3, "type": 3,
"url": "https://mom.feihe.com/expertsView?from=home" "url": "https://mom.feihe.com/expertsView?from=home"
} }
}, },
"channelTabList": [ "channelTabList": ["凯叔讲故事", "品格培养", "知识科普", "睡眠作息", "宝贝喂养"],
"凯叔讲故事", "popupImageObj": {
"品格培养", "btnName": "立即寻宝",
"知识科普", "jumpType": 1,
"睡眠作息", "imageUrl": "homepage/popImg/popBgImg2.jpg",
"宝贝喂养" "jumpExtra": {},
], "title": "北纬47°鲜活溯源之旅",
"popupImageObj": { "jumpUrl": "/pages/syWebview/syWebview?p=xmh11"
"jumpType": 1, },
"imageUrl": "homepage/popImg/popBgImg2.jpg", "voiceStory": {
"jumpExtra": {}, "link": {
"jumpUrl": "/pages/syWebview/syWebview?p=xmh11" "type": 3,
}, "url": "https://mom.feihe.com/babyWikipedia?from=song&sourceFrom=moreTools&source=moreTools&num=1&bir=2024-05-23&monthAge=12&month=null"
"voiceStory": { }
"link": { },
"type": 3, "channelTabListMianTitle": "有声频道",
"url": "https://mom.feihe.com/babyWikipedia?from=song&sourceFrom=moreTools&source=moreTools&num=1&bir=2024-05-23&monthAge=12&month=null" "swiperList": [{
} "img": "homepage/homeSwiper/V1/7.jpg",
}, "link": {
"channelTabListMianTitle": "有声频道", "extra": {},
"swiperList": [ "type": 1,
{ "url": "/pages/syWebview/syWebview?p=xmh09"
"img": "homepage/homeSwiper/V1/7.jpg", },
"link": { "type": 1,
"extra": {}, "title": "北纬47°鲜活溯源之旅",
"type": 1, "url": "homepage/homeSwiper/V1/7.jpg"
"url": "/pages/syWebview/syWebview?p=xmh09" }, {
}, "videoUrl": "homepage/homeSwiper/V1/8.mp4",
"type": 1, "link": {},
"url": "homepage/homeSwiper/V1/7.jpg" "title": "先是自己再是妈妈",
}, "url": "homepage/homeSwiper/V1/8.png"
{ }, {
"videoUrl": "homepage/homeSwiper/V1/2.m4v", "videoUrl": "homepage/homeSwiper/V1/2.m4v",
"link": {}, "link": {},
"url": "homepage/homeSwiper/V1/2.png" "title": "成为妈妈更懂妈妈",
} "url": "homepage/homeSwiper/V1/2.png"
], }, {
"childrenInfoList": [ "img": "homepage/homeSwiper/V1/28会员日.jpg",
[ "link": {
{ "extra": {
"desc2": "乙肝母婴传播可防可控,但“时间窗口”不容错过!", "envVersion": "release",
"link": { "appId": "wx4205ec55b793245e"
"extra": {}, },
"type": 3, "type": 2,
"url": "https://mp.weixin.qq.com/s/8OHpMdvbuwJPGsfdXs7aDg" "url": "/subPackages/shopMainList/topicNew/index?id=1001087"
}, },
"isNew": false, "title": "28会员日",
"desc": "新生儿出生后24小时必做!错过可能影响一生健康", "url": "homepage/homeSwiper/V1/28会员日.jpg"
"bgUrl": "homepage/children/childrenV1/1.jpg" }],
}, "childrenInfoList": [
{ [{
"desc2": "家长通过科学抚触,不仅能激活宝宝大脑神经突触,还能为宝宝的认知力、自护力打下坚实基础。", "desc2": "乙肝母婴传播可防可控,但“时间窗口”不容错过!",
"link": { "link": {
"extra": {}, "extra": {},
"type": 3, "type": 3,
"url": "https://mp.weixin.qq.com/s/vMyPcDbAmwMsZCMlW0kkDA" "url": "https://mp.weixin.qq.com/s/8OHpMdvbuwJPGsfdXs7aDg"
}, },
"isNew": false, "isNew": false,
"desc": "0-3岁宝宝触觉发育关键期,附按摩手法!", "desc": "新生儿出生后24小时必做!错过可能影响一生健康",
"bgUrl": "homepage/children/childrenV1/2.jpg" "bgUrl": "homepage/children/childrenV1/1.jpg"
}, }, {
{ "desc2": "家长通过科学抚触,不仅能激活宝宝大脑神经突触,还能为宝宝的认知力、自护力打下坚实基础。",
"desc2": "究竟是体质虚弱?生病了?还是缺乏某些营养元素呢?星妈会带你一次性搞懂宝宝出汗的秘密!", "link": {
"link": { "extra": {},
"extra": {}, "type": 3,
"type": 3, "url": "https://mp.weixin.qq.com/s/vMyPcDbAmwMsZCMlW0kkDA"
"url": "https://mp.weixin.qq.com/s/pnYVG4yTuBSbNN-fIYKrCQ" },
}, "isNew": false,
"isNew": false, "desc": "0-3岁宝宝触觉发育关键期,附按摩手法!",
"desc": "宝宝满头汗vs全身湿!小心这4种疾病,正在偷走健康!", "bgUrl": "homepage/children/childrenV1/2.jpg"
"bgUrl": "homepage/children/childrenV1/3.jpg" }, {
} "desc2": "究竟是体质虚弱?生病了?还是缺乏某些营养元素呢?星妈会带你一次性搞懂宝宝出汗的秘密!",
] "link": {
], "extra": {},
"vipConfigList": [ "type": 3,
{ "url": "https://mp.weixin.qq.com/s/pnYVG4yTuBSbNN-fIYKrCQ"
"btnTitle": "首注200元优惠券", },
"subTitle": "新人礼权益", "isNew": false,
"level": "注册会员", "desc": "宝宝满头汗vs全身湿!小心这4种疾病,正在偷走健康!",
"btnSubTitle": "立即注册", "bgUrl": "homepage/children/childrenV1/3.jpg"
"grade": "-1", }]
"bgUrl": "homepage/cardbg1.png" ],
}, "vipConfigList": [{
{ "btnTitle": "首注200元优惠券",
"btnTitle": "三甲医生在线问诊", "subTitle": "新人礼权益",
"subTitle": "免费问诊权益", "level": "注册会员",
"btnSubTitle": "立即了解", "btnSubTitle": "立即注册",
"grade": "0", "grade": "-1",
"link": { "bgUrl": "homepage/cardbg1.png"
"extra": { }, {
"envVersion": "release", "btnTitle": "三甲医生在线问诊",
"appId": "wx4205ec55b793245e" "subTitle": "免费问诊权益",
}, "btnSubTitle": "立即了解",
"type": 2, "grade": "0",
"url": "subPackages/xmhMainProcess/member/index?entrySource=xmh_wechatmp_points_recgoodsbot" "link": {
}, "extra": {
"bgUrl": "homepage/cardbg1.png" "envVersion": "release",
}, "appId": "wx4205ec55b793245e"
{ },
"btnTitle": "12类系列课程", "type": 2,
"subTitle": "育儿课程权益", "url": "subPackages/xmhMainProcess/member/index?entrySource=xmh_wechatmp_points_recgoodsbot"
"btnSubTitle": "立即了解", },
"grade": "1", "bgUrl": "homepage/cardbg1.png"
"link": { }, {
"extra": { "btnTitle": "12类系列课程",
"envVersion": "release", "subTitle": "育儿课程权益",
"appId": "wx4205ec55b793245e" "btnSubTitle": "立即了解",
}, "grade": "1",
"type": 2, "link": {
"url": "subPackages/xmhMainProcess/member/index?entrySource=xmh_wechatmp_points_recgoodsbot" "extra": {
}, "envVersion": "release",
"bgUrl": "homepage/cardbg1.png" "appId": "wx4205ec55b793245e"
}, },
{ "type": 2,
"btnTitle": "12类系列课程", "url": "subPackages/xmhMainProcess/member/index?entrySource=xmh_wechatmp_points_recgoodsbot"
"subTitle": "育儿课程权益", },
"btnSubTitle": "立即了解", "bgUrl": "homepage/cardbg1.png"
"grade": "2", }, {
"link": { "btnTitle": "12类系列课程",
"extra": { "subTitle": "育儿课程权益",
"envVersion": "release", "btnSubTitle": "立即了解",
"appId": "wx4205ec55b793245e" "grade": "2",
}, "link": {
"type": 2, "extra": {
"url": "subPackages/xmhMainProcess/member/index?entrySource=xmh_wechatmp_points_recgoodsbot" "envVersion": "release",
}, "appId": "wx4205ec55b793245e"
"bgUrl": "homepage/cardbg1.png" },
}, "type": 2,
{ "url": "subPackages/xmhMainProcess/member/index?entrySource=xmh_wechatmp_points_recgoodsbot"
"btnTitle": "1分购、优惠券", },
"subTitle": "月月礼权益", "bgUrl": "homepage/cardbg1.png"
"btnSubTitle": "立即了解", }, {
"grade": "3", "btnTitle": "1分购、优惠券",
"link": { "subTitle": "月月礼权益",
"extra": { "btnSubTitle": "立即了解",
"envVersion": "release", "grade": "3",
"appId": "wx4205ec55b793245e" "link": {
}, "extra": {
"type": 2, "envVersion": "release",
"url": "subPackages/xmhMainProcess/member/index?entrySource=xmh_wechatmp_points_recgoodsbot" "appId": "wx4205ec55b793245e"
}, },
"bgUrl": "homepage/cardbg1.png" "type": 2,
}, "url": "subPackages/xmhMainProcess/member/index?entrySource=xmh_wechatmp_points_recgoodsbot"
{ },
"btnTitle": "1分购、优惠券", "bgUrl": "homepage/cardbg1.png"
"subTitle": "月月礼权益", }, {
"btnSubTitle": "立即了解", "btnTitle": "1分购、优惠券",
"grade": "4", "subTitle": "月月礼权益",
"link": { "btnSubTitle": "立即了解",
"extra": { "grade": "4",
"envVersion": "release", "link": {
"appId": "wx4205ec55b793245e" "extra": {
}, "envVersion": "release",
"type": 2, "appId": "wx4205ec55b793245e"
"url": "subPackages/xmhMainProcess/member/index?entrySource=xmh_wechatmp_points_recgoodsbot" },
}, "type": 2,
"bgUrl": "homepage/cardbg1.png" "url": "subPackages/xmhMainProcess/member/index?entrySource=xmh_wechatmp_points_recgoodsbot"
} },
], "bgUrl": "homepage/cardbg1.png"
"changelInfoList": [ }],
[ "changelInfoList": [
{ [{
"link": { "link": {
"extra": {}, "extra": {},
"type": 3, "type": 3,
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=22101&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=22101&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
}, },
"desc": "凯叔·金子美铃童诗:【藏好了吗】", "desc": "凯叔·金子美铃童诗:【藏好了吗】",
"bgUrl": "homepage/channel/soundChannelV1/1/1.jpg" "bgUrl": "homepage/channel/soundChannelV1/1/1.jpg"
}, }, {
{ "link": {
"link": { "extra": {},
"extra": {}, "type": 3,
"type": 3, "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=22102&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=22102&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" },
}, "desc": "凯叔·金子美铃童诗:【水和风和娃娃】",
"desc": "凯叔·金子美铃童诗:【水和风和娃娃】", "bgUrl": "homepage/channel/soundChannelV1/1/2.jpg"
"bgUrl": "homepage/channel/soundChannelV1/1/2.jpg" }, {
}, "link": {
{ "extra": {},
"link": { "type": 3,
"extra": {}, "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=22103&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"type": 3, },
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=22103&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "desc": "凯叔·金子美铃童诗:【羽绒被】",
}, "bgUrl": "homepage/channel/soundChannelV1/1/3.jpg"
"desc": "凯叔·金子美铃童诗:【羽绒被】", }, {
"bgUrl": "homepage/channel/soundChannelV1/1/3.jpg" "link": {
}, "extra": {},
{ "type": 3,
"link": { "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=22104&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"extra": {}, },
"type": 3, "desc": "凯叔·金子美铃童诗:【知了的外衣】",
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=22104&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "bgUrl": "homepage/channel/soundChannelV1/1/4.jpg"
}, }, {
"desc": "凯叔·金子美铃童诗:【知了的外衣】", "link": {
"bgUrl": "homepage/channel/soundChannelV1/1/4.jpg" "extra": {},
}, "type": 3,
{ "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=22106&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"link": { },
"extra": {}, "desc": "凯叔·金子美铃童诗:【风】",
"type": 3, "bgUrl": "homepage/channel/soundChannelV1/1/5.jpg"
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=22106&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" }, {
}, "link": {
"desc": "凯叔·金子美铃童诗:【风】", "extra": {},
"bgUrl": "homepage/channel/soundChannelV1/1/5.jpg" "type": 3,
}, "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=22107&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
{ },
"link": { "desc": "凯叔·金子美铃童诗:【我和小鸟和铃铛】",
"extra": {}, "bgUrl": "homepage/channel/soundChannelV1/1/6.jpg"
"type": 3, }],
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=22107&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" [{
}, "link": {
"desc": "凯叔·金子美铃童诗:【我和小鸟和铃铛】", "extra": {},
"bgUrl": "homepage/channel/soundChannelV1/1/6.jpg" "type": 3,
} "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21891&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
], },
[ "desc": "培养宝宝不虚荣的好品格:【红舞鞋】",
{ "bgUrl": "homepage/channel/soundChannelV1/2/1.jpg"
"link": { }, {
"extra": {}, "link": {
"type": 3, "extra": {},
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21891&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "type": 3,
}, "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21845&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"desc": "培养宝宝不虚荣的好品格:【红舞鞋】", },
"bgUrl": "homepage/channel/soundChannelV1/2/1.jpg" "desc": "【动物王国】教宝宝学会爱护东西:【谁是破坏王】",
}, "bgUrl": "homepage/channel/soundChannelV1/2/2.jpg"
{ }, {
"link": { "link": {
"extra": {}, "extra": {},
"type": 3, "type": 3,
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21845&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21930&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
}, },
"desc": "【动物王国】教宝宝学会爱护东西:【谁是破坏王】", "desc": "培养宝宝拒绝的勇气:【该说不,就说不】",
"bgUrl": "homepage/channel/soundChannelV1/2/2.jpg" "bgUrl": "homepage/channel/soundChannelV1/2/3.jpg"
}, }, {
{ "link": {
"link": { "extra": {},
"extra": {}, "type": 3,
"type": 3, "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21898&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21930&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" },
}, "desc": "培养宝宝专心的好习惯:【两个青年学棋】",
"desc": "培养宝宝拒绝的勇气:【该说不,就说不】", "bgUrl": "homepage/channel/soundChannelV1/2/4.jpg"
"bgUrl": "homepage/channel/soundChannelV1/2/3.jpg" }, {
}, "link": {
{ "extra": {},
"link": { "type": 3,
"extra": {}, "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21953&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"type": 3, },
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21898&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "desc": "培养宝宝坚持的好品格:【不怕挫折的渔夫】",
}, "bgUrl": "homepage/channel/soundChannelV1/2/5.jpg"
"desc": "培养宝宝专心的好习惯:【两个青年学棋】", }, {
"bgUrl": "homepage/channel/soundChannelV1/2/4.jpg" "link": {
}, "extra": {},
{ "type": 3,
"link": { "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21840&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"extra": {}, },
"type": 3, "desc": "培养宝宝的自制力:【一次只要一个】",
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21953&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "bgUrl": "homepage/channel/soundChannelV1/2/6.jpg"
}, }],
"desc": "培养宝宝坚持的好品格:【不怕挫折的渔夫】", [{
"bgUrl": "homepage/channel/soundChannelV1/2/5.jpg" "link": {
}, "extra": {},
{ "type": 3,
"link": { "url": "https://mom.feihe.com/calendar/parentchildsongsdetail?id=22281"
"extra": {}, },
"type": 3, "desc": "营养健康小知识:营养元素钙铁锌",
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21840&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "bgUrl": "homepage/channel/soundChannelV1/3/1.jpg"
}, }, {
"desc": "培养宝宝的自制力:【一次只要一个】", "link": {
"bgUrl": "homepage/channel/soundChannelV1/2/6.jpg" "extra": {},
} "type": 3,
], "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21328&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
[ },
{ "desc": "宝宝指甲长倒刺是缺维生素吗?",
"link": { "bgUrl": "homepage/channel/soundChannelV1/3/2.jpg"
"extra": {}, }, {
"type": 3, "link": {
"url": "https://mom.feihe.com/calendar/parentchildsongsdetail?id=22281" "extra": {},
}, "type": 3,
"desc": "营养健康小知识:营养元素钙铁锌", "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21545&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"bgUrl": "homepage/channel/soundChannelV1/3/1.jpg" },
}, "desc": "如何分辨宝宝是攒肚还是便秘?",
{ "bgUrl": "homepage/channel/soundChannelV1/3/3.jpg"
"link": { }, {
"extra": {}, "link": {
"type": 3, "extra": {},
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21328&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "type": 3,
}, "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21310&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"desc": "宝宝指甲长倒刺是缺维生素吗?", },
"bgUrl": "homepage/channel/soundChannelV1/3/2.jpg" "desc": "手足口疫苗有必要打吗?",
}, "bgUrl": "homepage/channel/soundChannelV1/3/4.jpg"
{ }, {
"link": { "link": {
"extra": {}, "extra": {},
"type": 3, "type": 3,
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21545&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21734&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
}, },
"desc": "如何分辨宝宝是攒肚还是便秘?", "desc": "宝宝多大开始刷牙?一定不能晚于这个时间!",
"bgUrl": "homepage/channel/soundChannelV1/3/3.jpg" "bgUrl": "homepage/channel/soundChannelV1/3/5.jpg"
}, }, {
{ "link": {
"link": { "extra": {},
"extra": {}, "type": 3,
"type": 3, "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=25897&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21310&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" },
}, "desc": "如何缓解0-6月宝宝肠绞痛?",
"desc": "手足口疫苗有必要打吗?", "bgUrl": "homepage/channel/soundChannelV1/3/6.jpg"
"bgUrl": "homepage/channel/soundChannelV1/3/4.jpg" }],
}, [{
{ "link": {
"link": { "extra": {},
"extra": {}, "type": 3,
"type": 3, "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21533&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21734&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" },
}, "desc": "如何拯救睡渣宝宝?培养自主入睡?",
"desc": "宝宝多大开始刷牙?一定不能晚于这个时间!", "bgUrl": "homepage/channel/soundChannelV1/4/1.jpg"
"bgUrl": "homepage/channel/soundChannelV1/3/5.jpg" }, {
}, "link": {
{ "extra": {},
"link": { "type": 3,
"extra": {}, "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21602&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"type": 3, },
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=25897&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "desc": "开灯睡觉影响宝宝智力发育?",
}, "bgUrl": "homepage/channel/soundChannelV1/4/2.jpg"
"desc": "如何缓解0-6月宝宝肠绞痛?", }, {
"bgUrl": "homepage/channel/soundChannelV1/3/6.jpg" "link": {
} "extra": {},
], "type": 3,
[ "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21613&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
{ },
"link": { "desc": "宝宝都爱“投降式睡姿”?要纠正吗?",
"extra": {}, "bgUrl": "homepage/channel/soundChannelV1/4/3.jpg"
"type": 3, }, {
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21533&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "link": {
}, "extra": {},
"desc": "如何拯救睡渣宝宝?培养自主入睡?", "type": 3,
"bgUrl": "homepage/channel/soundChannelV1/4/1.jpg" "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21494&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
}, },
{ "desc": "娃睡得正香,要不要叫醒吃奶?",
"link": { "bgUrl": "homepage/channel/soundChannelV1/4/4.jpg"
"extra": {}, }, {
"type": 3, "link": {
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21602&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "extra": {},
}, "type": 3,
"desc": "开灯睡觉影响宝宝智力发育?", "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21633&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"bgUrl": "homepage/channel/soundChannelV1/4/2.jpg" },
}, "desc": "宝宝总夜醒怎么办?",
{ "bgUrl": "homepage/channel/soundChannelV1/4/5.jpg"
"link": { }, {
"extra": {}, "link": {
"type": 3, "extra": {},
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21613&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "type": 3,
}, "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21629&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"desc": "宝宝都爱“投降式睡姿”?要纠正吗?", },
"bgUrl": "homepage/channel/soundChannelV1/4/3.jpg" "desc": "宝宝每天睡多久合适?",
}, "bgUrl": "homepage/channel/soundChannelV1/4/6.jpg"
{ }],
"link": { [{
"extra": {}, "link": {
"type": 3, "extra": {},
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21494&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "type": 3,
}, "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21357&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"desc": "娃睡得正香,要不要叫醒吃奶?", },
"bgUrl": "homepage/channel/soundChannelV1/4/4.jpg" "desc": "宝宝夏日拉肚子该怎么办?",
}, "bgUrl": "homepage/channel/soundChannelV1/5/1.jpg"
{ }, {
"link": { "link": {
"extra": {}, "extra": {},
"type": 3, "type": 3,
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21633&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21497&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
}, },
"desc": "宝宝总夜醒怎么办?", "desc": "给宝宝冲奶粉,冲稀点不上火,浓点更营养?",
"bgUrl": "homepage/channel/soundChannelV1/4/5.jpg" "bgUrl": "homepage/channel/soundChannelV1/5/2.jpg"
}, }, {
{ "link": {
"link": { "extra": {},
"extra": {}, "type": 3,
"type": 3, "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21506&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21629&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" },
}, "desc": "怎样辨别奶粉中含有香精?",
"desc": "宝宝每天睡多久合适?", "bgUrl": "homepage/channel/soundChannelV1/5/3.jpg"
"bgUrl": "homepage/channel/soundChannelV1/4/6.jpg" }, {
} "link": {
], "extra": {},
[ "type": 3,
{ "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21455&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
"link": { },
"extra": {}, "desc": "怎样判断宝宝吃饱了没?",
"type": 3, "bgUrl": "homepage/channel/soundChannelV1/5/4.jpg"
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21357&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" }, {
}, "link": {
"desc": "宝宝夏日拉肚子该怎么办?", "extra": {},
"bgUrl": "homepage/channel/soundChannelV1/5/1.jpg" "type": 3,
}, "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21495&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
{ },
"link": { "desc": "奶粉颜色偏黄好?还是偏白好?",
"extra": {}, "bgUrl": "homepage/channel/soundChannelV1/5/5.jpg"
"type": 3, }, {
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21497&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "link": {
}, "extra": {},
"desc": "给宝宝冲奶粉,冲稀点不上火,浓点更营养?", "type": 3,
"bgUrl": "homepage/channel/soundChannelV1/5/2.jpg" "url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21489&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0"
}, },
{ "desc": "冲奶粉,不能用哪种水?",
"link": { "bgUrl": "homepage/channel/soundChannelV1/5/6.jpg"
"extra": {}, }]
"type": 3, ],
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21506&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "bottomLinkList": [{
}, "_style": "width:70rpx;height:109rpx;",
"desc": "怎样辨别奶粉中含有香精?", "link": "www.baidu.com",
"bgUrl": "homepage/channel/soundChannelV1/5/3.jpg" "bgUrl": "homepage/iconwx.png"
}, }, {
{ "_style": "width:95rpx;height:109rpx;",
"link": { "link": "www.baidu.com",
"extra": {}, "bgUrl": "homepage/iconqw.png"
"type": 3, }, {
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21455&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "_style": "width:70rpx;height:109rpx;",
}, "link": "www.baidu.com",
"desc": "怎样判断宝宝吃饱了没?", "bgUrl": "homepage/iconsph.png"
"bgUrl": "homepage/channel/soundChannelV1/5/4.jpg" }, {
}, "_style": "width:88rpx;height:99rpx;",
{ "link": "www.baidu.com",
"link": { "bgUrl": "homepage/iconxhs.png"
"extra": {}, }],
"type": 3, "vipCardList": [{
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21495&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "btnTitle": "12类系列课程",
}, "subTitle": "育儿课程权益",
"desc": "奶粉颜色偏黄好?还是偏白好?", "level": "钻石会员",
"bgUrl": "homepage/channel/soundChannelV1/5/5.jpg" "btnSubTitle": "立即了解",
}, "link": {
{ "extra": {
"link": { "envVersion": "release",
"extra": {}, "appId": "wx4205ec55b793245e"
"type": 3, },
"url": "https://mom.feihe.com/babyWikipedia/audioDetail?id=21489&type=3&period_id=5&tag_id=1&navActive=1&fnTagId=0" "type": 2,
}, "url": "subPackages/xmhMainProcess/member/index?entrySource=xmh_wechatmp_points_recgoodsbot"
"desc": "冲奶粉,不能用哪种水?", },
"bgUrl": "homepage/channel/soundChannelV1/5/6.jpg" "bgUrl": "homepage/cardbg1.png"
} }, {
] "btnTitle": "",
], "showCornerTxt": "",
"bottomLinkList": [ "subTitle": "来自万年黑土的健康食品",
{ "level": "北纬47°系列",
"_style": "width:70rpx;height:109rpx;", "btnSubTitle": "",
"link": "www.baidu.com", "link": {
"bgUrl": "homepage/iconwx.png" "extra": {
}, "envVersion": "release",
{ "appId": "wx4205ec55b793245e"
"_style": "width:95rpx;height:109rpx;", },
"link": "www.baidu.com", "type": 2,
"bgUrl": "homepage/iconqw.png" "url": "subPackages/shopMainList/topicNew/index?id=1000265&entrySource=xmh_wechatmp_home_recgoods"
}, },
{ "bgUrl": "homepage/cardbg2.png"
"_style": "width:70rpx;height:109rpx;", }, {
"link": "www.baidu.com", "btnTitle": "",
"bgUrl": "homepage/iconsph.png" "showCornerTxt": "",
}, "subTitle": "专家文章、育儿知识、饮食知识",
{ "level": "育儿宝典",
"_style": "width:88rpx;height:99rpx;", "btnSubTitle": "",
"link": "www.baidu.com", "link": {
"bgUrl": "homepage/iconxhs.png" "extra": {},
} "type": 1,
], "url": "/pages/library/ContentLibrary"
"vipCardList": [ },
{ "bgUrl": "homepage/cardbg3.png"
"btnTitle": "12类系列课程", }],
"subTitle": "育儿课程权益", "qrInfoList": [{
"level": "钻石会员", "qrUrl": "homepage/qrcode_gzh.png",
"btnSubTitle": "立即了解", "title": "公众号",
"link": { "desc": "长按关注<span style:'color:#D3A358;'>星妈会</span>公众号,了解更多专业育儿资讯"
"extra": { }, {
"envVersion": "release", "qrUrl": "homepage/qrcode_qw.png",
"appId": "wx4205ec55b793245e" "title": "企业微信",
}, "desc": "长按添加<span style:'color:#D3A358;'>星妈管家</span>,享受专家问诊与社群福利活动"
"type": 2, }, {
"url": "subPackages/xmhMainProcess/member/index?entrySource=xmh_wechatmp_points_recgoodsbot" "qrUrl": "homepage/qrcode_sph.png",
}, "title": "视频号",
"bgUrl": "homepage/cardbg1.png" "desc": "扫码关注<span style:'color:#D3A358;'>星妈会</span>视频号,了解更多专业育儿资讯"
}, }],
{ "childrenInfoListMianTitle": "育儿智库",
"btnTitle": "", "expertTeam": {
"showCornerTxt": "", "maintitle": "专家团",
"subTitle": "来自万年黑土的健康食品", "etConUrl2": "homepage/et_con2.png",
"level": "北纬47°系列", "etConUrl3": "homepage/et_con3.png",
"btnSubTitle": "", "etConUrl1": "homepage/et_con11.png"
"link": { }
"extra": {
"envVersion": "release",
"appId": "wx4205ec55b793245e"
},
"type": 2,
"url": "subPackages/shopMainList/topicNew/index?id=1000265&entrySource=xmh_wechatmp_home_recgoods"
},
"bgUrl": "homepage/cardbg2.png"
},
{
"btnTitle": "",
"showCornerTxt": "",
"subTitle": "专家文章、育儿知识、饮食知识",
"level": "育儿宝典",
"btnSubTitle": "",
"link": {
"extra": {},
"type": 1,
"url": "/pages/library/ContentLibrary"
},
"bgUrl": "homepage/cardbg3.png"
}
],
"qrInfoList": [
{
"qrUrl": "homepage/qrcode_gzh.png",
"title": "公众号",
"desc": "长按关注<span style:'color:#D3A358;'>星妈会</span>公众号,了解更多专业育儿资讯"
},
{
"qrUrl": "homepage/qrcode_qw.png",
"title": "企业微信",
"desc": "长按添加<span style:'color:#D3A358;'>星妈管家</span>,享受专家问诊与社群福利活动"
},
{
"qrUrl": "homepage/qrcode_sph.png",
"title": "视频号",
"desc": "扫码关注<span style:'color:#D3A358;'>星妈会</span>视频号,了解更多专业育儿资讯"
}
],
"childrenInfoListMianTitle": "育儿智库",
"expertTeam": {
"maintitle": "专家团",
"etConUrl2": "homepage/et_con2.png",
"etConUrl3": "homepage/et_con3.png",
"etConUrl1": "homepage/et_con11.png"
}
} }
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
{ {
"name": "20250528_FHQ1",
"lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "lockfileVersion": 1,
"": { "dependencies": {
"dependencies": { "crypto-js": {
"crypto-js": "^4.2.0"
}
},
"node_modules/crypto-js": {
"version": "4.2.0", "version": "4.2.0",
"resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz", "resolved": "http://npm.dui88.com:80/crypto-js/-/crypto-js-4.2.0.tgz",
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
} }
} }
......
...@@ -217,6 +217,12 @@ const onAdd = () => { ...@@ -217,6 +217,12 @@ const onAdd = () => {
} }
}) })
popup.value.open() popup.value.open()
md.sensorComponentLogTake({
xcxPopExposure: "true",
toolName: "产检提醒",
popName: "选择产检项目弹窗"
});
// 回显数据 // 回显数据
if (listData.value.length > 0) { if (listData.value.length > 0) {
// 回显数据 - 将 listData 中的数据同步到 selectedAirports // 回显数据 - 将 listData 中的数据同步到 selectedAirports
...@@ -224,7 +230,15 @@ const onAdd = () => { ...@@ -224,7 +230,15 @@ const onAdd = () => {
} }
} }
// 关闭项目弹窗 // 关闭项目弹窗
const onPopupClose = () => { const onPopupClose = (type) => {
if (type !== 'nonePop') {
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "产检提醒",
popName: "选择产检项目弹窗",
buttonName: "关闭"
});
}
wx.setPageStyle({ wx.setPageStyle({
style: { style: {
overflow: 'auto' overflow: 'auto'
...@@ -232,6 +246,7 @@ const onPopupClose = () => { ...@@ -232,6 +246,7 @@ const onPopupClose = () => {
}) })
selectedAirports.value = [] selectedAirports.value = []
popup.value.close() popup.value.close()
} }
// 检查是否已选中 // 检查是否已选中
const isSelected = (id) => { const isSelected = (id) => {
...@@ -246,6 +261,12 @@ const toggleSelect = (airport) => { ...@@ -246,6 +261,12 @@ const toggleSelect = (airport) => {
id: airport.id, id: airport.id,
itemName: airport.itemName itemName: airport.itemName
}); });
md.sensorComponentLogTake({
xcxPopClick: "true",
toolName: "产检提醒",
popName: "选择产检项目弹窗",
buttonName: airport.itemName
});
} else { } else {
selectedAirports.value.splice(index, 1); selectedAirports.value.splice(index, 1);
} }
...@@ -259,7 +280,13 @@ const saveSelection = () => { ...@@ -259,7 +280,13 @@ const saveSelection = () => {
const uniqueMap = new Map(); const uniqueMap = new Map();
combined.forEach(item => uniqueMap.set(item.id, item)); combined.forEach(item => uniqueMap.set(item.id, item));
listData.value = Array.from(uniqueMap.values()); listData.value = Array.from(uniqueMap.values());
onPopupClose(); onPopupClose("nonePop");
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "产检提醒",
popName: "选择产检项目弹窗",
buttonName: "确认"
});
}; };
// // 移除已选项目 // // 移除已选项目
// const removeSelected = (airport) => { // const removeSelected = (airport) => {
......
...@@ -1885,6 +1885,12 @@ async function completeRecord() { ...@@ -1885,6 +1885,12 @@ async function completeRecord() {
// 显示成功弹窗 // 显示成功弹窗
successPopup.value.open() successPopup.value.open()
md.sensorPopLogTake({
xcxPopExposure: "true",
toolName: "喂养记录",
popName: "添加成功弹窗"
});
...@@ -2406,6 +2412,7 @@ function showAddFoodPopup(categoryName) { ...@@ -2406,6 +2412,7 @@ function showAddFoodPopup(categoryName) {
pageName: "喂养工具首页", pageName: "喂养工具首页",
buttonName: "辅食添加" + categoryName, buttonName: "辅食添加" + categoryName,
}); });
// 防连点检查 // 防连点检查
if (foodSelectionState.value.isAddingFood) { if (foodSelectionState.value.isAddingFood) {
console.log('防连点:添加辅食按钮被阻止') console.log('防连点:添加辅食按钮被阻止')
...@@ -2439,7 +2446,11 @@ function showAddFoodPopup(categoryName) { ...@@ -2439,7 +2446,11 @@ function showAddFoodPopup(categoryName) {
foodSelectionState.value.newFoodItem = '' foodSelectionState.value.newFoodItem = ''
// 显示弹窗 // 显示弹窗
addFoodPopup.value.open() addFoodPopup.value.open()
md.sensorPopLogTake({
xcxPopExposure: "true",
toolName: "喂养记录",
popName: "新增辅食弹窗",
});
// 立即重置防连点状态(弹窗显示后) // 立即重置防连点状态(弹窗显示后)
setTimeout(() => { setTimeout(() => {
foodSelectionState.value.isAddingFood = false foodSelectionState.value.isAddingFood = false
...@@ -2458,6 +2469,12 @@ function toggleCategoryExpansion(categoryName) { ...@@ -2458,6 +2469,12 @@ function toggleCategoryExpansion(categoryName) {
function cancelAddFood() { function cancelAddFood() {
addFoodPopup.value.close() addFoodPopup.value.close()
foodSelectionState.value.newFoodItem = '' foodSelectionState.value.newFoodItem = ''
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "喂养记录",
popName: "新增辅食弹窗",
buttonName: "取消"
});
} }
function confirmAddFood() { function confirmAddFood() {
...@@ -2465,6 +2482,12 @@ function confirmAddFood() { ...@@ -2465,6 +2482,12 @@ function confirmAddFood() {
console.log('防连点:添加辅食按钮被阻止') console.log('防连点:添加辅食按钮被阻止')
return return
} }
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "喂养记录",
popName: "新增辅食弹窗",
buttonName: "添加"
});
foodSelectionState.value.isAddingFood = true foodSelectionState.value.isAddingFood = true
console.log('防连点:设置添加辅食状态为true') console.log('防连点:设置添加辅食状态为true')
...@@ -3246,7 +3269,11 @@ async function startPollingRecognitionResult(taskId) { ...@@ -3246,7 +3269,11 @@ async function startPollingRecognitionResult(taskId) {
voiceRecognitionState.value.voiceDateTime = `${year}-${month}-${day} ${hours}:${minutes}:00` voiceRecognitionState.value.voiceDateTime = `${year}-${month}-${day} ${hours}:${minutes}:00`
} }
voiceRecognitionState.value.showResultPage = true voiceRecognitionState.value.showResultPage = true
md.sensorPopLogTake({
xcxPopExposure: "true",
toolName: "喂养记录",
popName: "语音识别结果弹窗"
});
// 显示识别成功提示 // 显示识别成功提示
uni.showToast({ uni.showToast({
title: '语音识别成功', title: '语音识别成功',
...@@ -3402,7 +3429,12 @@ function formatRecordingDuration(seconds) { ...@@ -3402,7 +3429,12 @@ function formatRecordingDuration(seconds) {
function reRecognize() { function reRecognize() {
console.log('重新识别...') console.log('重新识别...')
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "喂养记录",
popName: "语音识别结果弹窗",
buttonName: "不对,重新识别"
});
// 清理轮询状态 // 清理轮询状态
clearPollingInterval() clearPollingInterval()
...@@ -3429,6 +3461,12 @@ async function completeVoiceRecord() { ...@@ -3429,6 +3461,12 @@ async function completeVoiceRecord() {
if (isSubmitting.value) { if (isSubmitting.value) {
return return
} }
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "喂养记录",
popName: "语音识别结果弹窗",
buttonName: "完成记录"
});
const detailText = voiceRecognitionState.value.recognizedText.trim() const detailText = voiceRecognitionState.value.recognizedText.trim()
...@@ -3486,6 +3524,11 @@ async function completeVoiceRecord() { ...@@ -3486,6 +3524,11 @@ async function completeVoiceRecord() {
// 显示成功弹窗 // 显示成功弹窗
successPopup.value.open() successPopup.value.open()
md.sensorPopLogTake({
xcxPopExposure: "true",
toolName: "喂养记录",
popName: "添加成功弹窗"
});
} catch (error) { } catch (error) {
console.error('保存语音记录失败:', error) console.error('保存语音记录失败:', error)
// uni.hideLoading() // uni.hideLoading()
...@@ -3543,11 +3586,23 @@ async function onSuccessJump() { ...@@ -3543,11 +3586,23 @@ async function onSuccessJump() {
}, },
}); // 关闭弹窗 }); // 关闭弹窗
successPopup.value.close() successPopup.value.close()
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "喂养记录",
popName: "添加成功弹窗",
buttonName: "咨询专家"
});
} }
function onSuccessClose() { function onSuccessClose() {
// 关闭弹窗 // 关闭弹窗
successPopup.value.close() successPopup.value.close()
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "喂养记录",
popName: "添加成功弹窗",
buttonName: "关闭"
});
// 跳转至记录页面 // 跳转至记录页面
uni.navigateTo({ uni.navigateTo({
url: '/pages/feedingRecord/feedingRecord' url: '/pages/feedingRecord/feedingRecord'
......
...@@ -723,9 +723,24 @@ function editRecord(index) { ...@@ -723,9 +723,24 @@ function editRecord(index) {
editingRecord.value = { index, record } editingRecord.value = { index, record }
showEditPopup.value = true showEditPopup.value = true
md.sensorPopLogTake({
xcxPopExposure: "true",
toolName: "喂养记录",
popName: "日历页确认修改内容弹窗"
});
} }
function closeEditPopup() { function closeEditPopup(type) {
if (type !== 'nonePop') {
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "喂养记录",
popName: "日历页确认修改内容弹窗",
buttonName: "取消"
});
}
showEditPopup.value = false showEditPopup.value = false
editingRecord.value = null editingRecord.value = null
editForm.value = { time: '', type: '', content: '' } editForm.value = { time: '', type: '', content: '' }
...@@ -800,6 +815,12 @@ function onEditTypeChange(event) { ...@@ -800,6 +815,12 @@ function onEditTypeChange(event) {
} }
async function saveEditRecord() { async function saveEditRecord() {
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "喂养记录",
popName: "日历页确认修改内容弹窗",
buttonName: "保存修改"
});
if (!editForm.value.time || !editForm.value.type) { if (!editForm.value.time || !editForm.value.type) {
uni.showToast({ title: '请填写完整信息', icon: 'none' }) uni.showToast({ title: '请填写完整信息', icon: 'none' })
return return
...@@ -868,7 +889,7 @@ async function saveEditRecord() { ...@@ -868,7 +889,7 @@ async function saveEditRecord() {
icon: 'none' icon: 'none'
}) })
closeEditPopup() closeEditPopup('nonePop')
// 清空缓存,确保获取最新数据 // 清空缓存,确保获取最新数据
clearCache() clearCache()
......
...@@ -38,7 +38,7 @@ const shareOptions = { ...@@ -38,7 +38,7 @@ const shareOptions = {
0: { 0: {
title: "8000万中国妈妈信赖的育儿品牌", title: "8000万中国妈妈信赖的育儿品牌",
path: "/pages/index/index?pageType=home", path: "/pages/index/index?pageType=home",
imageUrl: $baseUrl + "share/share_home.png", imageUrl: $baseUrl + "share/share_home0901.jpg",
}, },
1: { 1: {
title: "飞鹤提供家庭营养一站式解决方案", title: "飞鹤提供家庭营养一站式解决方案",
......
...@@ -170,10 +170,10 @@ ...@@ -170,10 +170,10 @@
<view class="item_line"></view> <view class="item_line"></view>
</view> </view>
<!--避字--> <!--避字-->
<view class="taboo_word"> <view class="taboo_word">
<view class="item_top"> <view class="item_top">
<span class="title_txt"></span> <span class="title_txt"></span>
<input class="taboo_input" :placeholder="showPlaceholder2 ? '示例:然、萌' : ''" v-model="avoidChars" <input class="taboo_input" :placeholder="showPlaceholder2 ? '示例:然、萌' : ''" v-model="avoidChars"
@blur="e => enforceSeparator(e, 2)" @click="showPlaceholder2 = false" /> @blur="e => enforceSeparator(e, 2)" @click="showPlaceholder2 = false" />
</view> </view>
...@@ -293,7 +293,7 @@ ...@@ -293,7 +293,7 @@
//必有字 //必有字
const requiredChars = ref(''); const requiredChars = ref('');
const showPlaceholder2 = ref(true); const showPlaceholder2 = ref(true);
//避 //避
const avoidChars = ref(''); const avoidChars = ref('');
//期望风格 //期望风格
const expectedStyle = ref(''); const expectedStyle = ref('');
...@@ -416,7 +416,7 @@ ...@@ -416,7 +416,7 @@
return input.length <= filtered.length || input === filtered return input.length <= filtered.length || input === filtered
} }
//设置必有字和避字,用、隔开每一个字 //设置必有字和避字,用、隔开每一个字
const enforceSeparator = (e, idx) => { const enforceSeparator = (e, idx) => {
let text = e.detail.value let text = e.detail.value
// 1. 移除所有现有分隔符(避免干扰) // 1. 移除所有现有分隔符(避免干扰)
......
...@@ -82,7 +82,7 @@ ...@@ -82,7 +82,7 @@
}" }"
> >
<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>
...@@ -232,7 +232,7 @@ import { showLoading, hideLoading } from "../../utils/index.js"; ...@@ -232,7 +232,7 @@ import { showLoading, hideLoading } from "../../utils/index.js";
import { updateBabyInfo, getGestationalWeeks } from "../../api/user.js"; import { updateBabyInfo, getGestationalWeeks } from "../../api/user.js";
import { usePageCfgStore } from "../../stores/pageCfg"; import { usePageCfgStore } from "../../stores/pageCfg";
import md from "../../md.js"; import md from "../../md.js";
import { jump, JumpType } from '../../utils/index.js'; import { jump, JumpType } from "../../utils/index.js";
const userStore = useUserStore(); const userStore = useUserStore();
const pageType = ref("add"); const pageType = ref("add");
const babyId = ref(""); const babyId = ref("");
...@@ -511,6 +511,13 @@ const onPickerChange = (e, name) => { ...@@ -511,6 +511,13 @@ const onPickerChange = (e, name) => {
const onRadioChange = (e, name) => { const onRadioChange = (e, name) => {
formData.value[name] = e.detail.value; formData.value[name] = e.detail.value;
}; };
const sleep = (delay) => {
return new Promise((resolve) => {
setTimeout(() => resolve(), delay);
});
};
const onSubmit = async (e) => { const onSubmit = async (e) => {
md.sensorLogTake({ md.sensorLogTake({
xcxClick: "我的页面-信息修改页点击", xcxClick: "我的页面-信息修改页点击",
...@@ -579,23 +586,24 @@ const onSubmit = async (e) => { ...@@ -579,23 +586,24 @@ const onSubmit = async (e) => {
hideLoading(); hideLoading();
if (res.success) { if (res.success) {
data?.id && data?.id && userStore.setBabyNickCache(data?.id, formData.value.babyName);
userStore.setBabyNickCache(data?.id, formData.value.babyName);
uni.showToast({
title: "提交成功",
icon: "success",
});
uni.navigateBack();
// jump({ // jump({
// type: JumpType.INNER, // type: JumpType.INNER,
// url: "/pages/index/index" // url: "/pages/index/index"
// }) // })
showLoading(); showLoading();
await sleep(3000);
await userStore.loadUserInfo(); await userStore.loadUserInfo();
await userStore.loadBabyInfo(); await userStore.loadBabyInfo();
await userStore.loadHomeInfo(); await userStore.loadHomeInfo();
hideLoading(); hideLoading();
uni.showToast({
title: "提交成功",
icon: "success",
});
uni.navigateBack();
} else { } else {
uni.showToast({ uni.showToast({
title: res.message, title: res.message,
...@@ -674,21 +682,18 @@ function onDateStatusChange(status) { ...@@ -674,21 +682,18 @@ function onDateStatusChange(status) {
} }
return true; return true;
} }
const getlabelFn =(item) =>{ const getlabelFn = (item) => {
if (item.name === "babyBirthday") { if (item.name === "babyBirthday") {
item.label = formData.value.babyStage == 1 ? '预产日期':'宝宝出生日期' item.label = formData.value.babyStage == 1 ? "预产日期" : "宝宝出生日期";
} }
return item.label return item.label;
} };
// getLabelByValue 支持所有映射字段 // getLabelByValue 支持所有映射字段
const getLabelByValue = (item, value) => { const getLabelByValue = (item, value) => {
if (item.name === "babyStage") { if (item.name === "babyStage") {
return babyStageMap.find((i) => i.value === value)?.label || ""; return babyStageMap.find((i) => i.value === value)?.label || "";
} }
if (item.name === "babyType") { if (item.name === "babyType") {
return babyTypeMap.find((i) => i.value === value)?.label || ""; return babyTypeMap.find((i) => i.value === value)?.label || "";
} }
...@@ -699,8 +704,12 @@ const getLabelByValue = (item, value) => { ...@@ -699,8 +704,12 @@ const getLabelByValue = (item, value) => {
// // 添加根据切换状态修改文案 // // 添加根据切换状态修改文案
if (item.name === "babyBirthday") { if (item.name === "babyBirthday") {
// console.log("🚀 ~ getLabelByValue ~ formData:", formData.value, item) // console.log("🚀 ~ getLabelByValue ~ formData:", formData.value, item)
item.placeholder = formData.value.babyBirthday? formData.value.babyBirthday : formData.value.babyStage == 1 ? '请选择预产日期':'请选择出生日期' item.placeholder = formData.value.babyBirthday
return item.placeholder ? formData.value.babyBirthday
: formData.value.babyStage == 1
? "请选择预产日期"
: "请选择出生日期";
return item.placeholder;
} }
return value; return value;
}; };
...@@ -740,7 +749,6 @@ const initData = () => { ...@@ -740,7 +749,6 @@ const initData = () => {
// 更新表单项的选项数据 // 更新表单项的选项数据
formItems.value.forEach((item) => { formItems.value.forEach((item) => {
if (item.name === "contentPreference") { if (item.name === "contentPreference") {
item.range = contentLikeOptions.value; item.range = contentLikeOptions.value;
} else if (item.name === "productPreference") { } else if (item.name === "productPreference") {
...@@ -761,7 +769,6 @@ const initData = () => { ...@@ -761,7 +769,6 @@ const initData = () => {
formData.value.babyStage == 2 ? "请选择出生日期" : "请选择预产日期"; formData.value.babyStage == 2 ? "请选择出生日期" : "请选择预产日期";
} }
}); });
}; };
onMounted(() => { onMounted(() => {
...@@ -774,13 +781,13 @@ onMounted(() => { ...@@ -774,13 +781,13 @@ onMounted(() => {
}); });
onLoad((options) => { onLoad((options) => {
console.log("🚀 ~ options-新增和修改:", options) console.log("🚀 ~ options-新增和修改:", options);
// debugger; // debugger;
pageType.value = options.type || "add"; pageType.value = options.type || "add";
babyId.value = options.id || ""; babyId.value = options.id || "";
if (pageType.value === "edit") { if (pageType.value === "edit") {
const baby = userStore.babyInfo; const baby = userStore.babyInfo;
console.log("🚀 ~ baby:", baby) console.log("🚀 ~ baby:", baby);
formData.value.babyStage = baby.babyStage ?? 2; formData.value.babyStage = baby.babyStage ?? 2;
formData.value.babyName = baby.babyName || ""; formData.value.babyName = baby.babyName || "";
formData.value.babyBirthday = baby.content?.babyBirthday || ""; formData.value.babyBirthday = baby.content?.babyBirthday || "";
......
<template> <template>
<view> <view>
<view class="postnatal"> <view class="postnatal">
<!-- 自定义头部 --> <!-- 自定义头部 -->
<!-- <customize-navigation> <!-- <customize-navigation>
<template v-slot:navbar-content> <template v-slot:navbar-content>
<view class="page-top"> <view class="page-top">
...@@ -11,10 +11,10 @@ ...@@ -11,10 +11,10 @@
<view class="page_title">产检提醒</view> <view class="page_title">产检提醒</view>
</view> </view>
</template> </template>
</customize-navigation> --> </customize-navigation> -->
<view class="postnatal-con"> <view class="postnatal-con">
<!-- 轮播图 --> <!-- 轮播图 -->
<swiper class="banner-swiper" :autoplay="true" :circular="true" v-if="bannerList.length > 0 "> <swiper class="banner-swiper" :autoplay="true" :circular="true" v-if="bannerList.length > 0">
<swiper-item v-for="(item, index) in bannerList" :key="index"> <swiper-item v-for="(item, index) in bannerList" :key="index">
<image class="banner-img" :src="`${item.img}`" mode="aspectFill" <image class="banner-img" :src="`${item.img}`" mode="aspectFill"
@click="handleBannerClick(item, index)" /> @click="handleBannerClick(item, index)" />
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
</view> </view>
<!-- 产检记录 --> <!-- 产检记录 -->
<scroll-view class="postnatal-con-record" scroll-y :scroll-top="scrollTop"> <scroll-view class="postnatal-con-record" scroll-y :scroll-top="scrollTop">
<!-- <view class="postnatal-con-record"> --> <!-- <view class="postnatal-con-record"> -->
<view :class="['record-item', `item-${index}`]" <view :class="['record-item', `item-${index}`]"
v-for="({ id, checkupDate, index, pregnancyWeek, status, examinationItems, type }, i) in homeInfo.checkupList" v-for="({ id, checkupDate, index, pregnancyWeek, status, examinationItems, type }, i) in homeInfo.checkupList"
@click="onDetails(id, type)" :key="i"> @click="onDetails(id, type)" :key="i">
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
重点:{{ getProject(examinationItems) }} 重点:{{ getProject(examinationItems) }}
</view> </view>
</view> </view>
<!-- </view> --> <!-- </view> -->
</scroll-view> </scroll-view>
</view> </view>
<!-- 新增产检 --> <!-- 新增产检 -->
...@@ -112,12 +112,13 @@ ...@@ -112,12 +112,13 @@
</view> </view>
</view> </view>
</view> </view>
<!-- 提示弹窗 --> <!-- 提示弹窗 -->
<popup-tip v-if="isTip" type="2" @statusChange="onBabyChange" @close="isTip = false"></popup-tip> <popup-tip v-if="isTip" type="2" @statusChange="onBabyChange" @close="isTip = false"></popup-tip>
<!-- 使用封装后的日期选择器组件 --> <!-- 使用封装后的日期选择器组件 -->
<DatePicker v-model:visible="visible" :default-date="time" @confirm="handleDateConfirm" /> <DatePicker v-model:visible="visible" :default-date="time" @confirm="handleDateConfirm"
/>
</view> </view>
</view> </view>
</template> </template>
...@@ -127,7 +128,8 @@ import { ...@@ -127,7 +128,8 @@ import {
ref, ref,
getCurrentInstance, getCurrentInstance,
onMounted, onMounted,
nextTick nextTick,
watch
} from 'vue' } from 'vue'
import { import {
onLoad, onLoad,
...@@ -193,6 +195,7 @@ const visible = ref(false) ...@@ -193,6 +195,7 @@ const visible = ref(false)
// 时间 // 时间
const time = ref('') const time = ref('')
const isClickClose = ref(false)
// 保存要修改的id // 保存要修改的id
const editId = ref(null) const editId = ref(null)
...@@ -258,7 +261,7 @@ const backHandler = () => { ...@@ -258,7 +261,7 @@ const backHandler = () => {
const handleBannerClick = (item, index) => { const handleBannerClick = (item, index) => {
console.log(item) console.log(item)
let buttonName = ''; let buttonName = '';
switch(index){ switch (index) {
case 0: case 0:
buttonName = '第一张焦点图'; buttonName = '第一张焦点图';
break; break;
...@@ -285,7 +288,7 @@ const handleBannerClick = (item, index) => { ...@@ -285,7 +288,7 @@ const handleBannerClick = (item, index) => {
}) })
} }
} }
// 新增体检 // 新增体检
const onAdd = () => { const onAdd = () => {
...@@ -306,7 +309,14 @@ const onBtn = (type) => { ...@@ -306,7 +309,14 @@ const onBtn = (type) => {
switch (type) { switch (type) {
case 0: case 0:
// 如果授权就不弹出提醒 // 如果授权就不弹出提醒
showPicker.value = isWxNotification.value ? true : false showPicker.value = isWxNotification.value ? true : false
if (showPicker.value) {
md.sensorPopLogTake({
xcxPopExposure: "true",
toolName: "产检提醒",
popName: "设置提醒时间弹窗"
});
}
buttonName = '提醒' buttonName = '提醒'
break; break;
...@@ -334,8 +344,17 @@ const onBtn = (type) => { ...@@ -334,8 +344,17 @@ const onBtn = (type) => {
} }
// 提醒关闭 // 提醒关闭
const close = () => { const close = (type) => {
if (type !== 'nonePop') {
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "产检提醒",
popName: "设置提醒时间弹窗",
buttonName: "取消"
});
}
showPicker.value = false; showPicker.value = false;
} }
// 选择提醒事件 // 选择提醒事件
const handleChange = (e) => { const handleChange = (e) => {
...@@ -343,10 +362,15 @@ const handleChange = (e) => { ...@@ -343,10 +362,15 @@ const handleChange = (e) => {
} }
// 确认选择 // 确认选择
const handleConfirm = () => { const handleConfirm = () => {
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "产检提醒",
popName: "设置提醒时间弹窗",
buttonName: "确认"
});
selectedValue.value = options[pickerValue.value].id; selectedValue.value = options[pickerValue.value].id;
console.log(selectedValue.value, homeInfo.value.wxTemplateId, babyId.value) console.log(selectedValue.value, homeInfo.value.wxTemplateId, babyId.value)
close(); close("nonePop");
// 订阅提醒 // 订阅提醒
uni.requestSubscribeMessage({ uni.requestSubscribeMessage({
tmplIds: [homeInfo.value.wxTemplateId], tmplIds: [homeInfo.value.wxTemplateId],
...@@ -359,7 +383,19 @@ const handleConfirm = () => { ...@@ -359,7 +383,19 @@ const handleConfirm = () => {
} }
}) })
} }
watch(visible, (newVal) => {
if (!newVal) {
if (isClickClose.value) {
return
}
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "产检提醒",
popName: "选择产检时间弹窗",
buttonName: "取消"
});
}
})
// 编辑时间 // 编辑时间
const onEdit = (id, newTime) => { const onEdit = (id, newTime) => {
md.sensorLogTake({ md.sensorLogTake({
...@@ -372,45 +408,61 @@ const onEdit = (id, newTime) => { ...@@ -372,45 +408,61 @@ const onEdit = (id, newTime) => {
time.value = newTime time.value = newTime
visible.value = true visible.value = true
editId.value = id editId.value = id
isClickClose.value = false
md.sensorPopLogTake({
xcxPopExposure: "true",
toolName: "产检提醒",
popName: "选择产检时间弹窗"
});
} }
// 选择日期回调确认 // 选择日期回调确认
const handleDateConfirm = (date) => { const handleDateConfirm = (date) => {
console.log('选择的日期是:', date); console.log('选择的日期是:', date);
time.value = date; time.value = date;
console.log(editId.value, time.value) console.log(editId.value, time.value)
onEditTime() onEditTime()
isClickClose.value = true
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "产检提醒",
popName: "选择产检时间弹窗",
buttonName: "确认"
});
} }
// 添加计算滚动位置的方法 // 添加计算滚动位置的方法
const scrollToCurrentWeek = async () => { const scrollToCurrentWeek = async () => {
// 确保数据已加载 // 确保数据已加载
if (!homeInfo.value || !homeInfo.value.gestationalWeeks || !homeInfo.value.checkupList) return; if (!homeInfo.value || !homeInfo.value.gestationalWeeks || !homeInfo.value.checkupList) return;
// 找到当前孕周对应的产检项 // 找到当前孕周对应的产检项
const currentItem = homeInfo.value.checkupList.find( const currentItem = homeInfo.value.checkupList.find(
item => item.pregnancyWeek == homeInfo.value.gestationalWeeks item => item.pregnancyWeek == homeInfo.value.gestationalWeeks
); );
if (!currentItem) return; if (!currentItem) return;
// 等待DOM更新 // 等待DOM更新
await nextTick(); await nextTick();
// 创建选择器查询 // 创建选择器查询
const query = uni.createSelectorQuery().in(proxy); const query = uni.createSelectorQuery().in(proxy);
query.select(`.item-${currentItem.index}`).boundingClientRect(); query.select(`.item-${currentItem.index}`).boundingClientRect();
query.select('.postnatal-con-record').boundingClientRect(); query.select('.postnatal-con-record').boundingClientRect();
query.exec((rects) => { query.exec((rects) => {
if (!rects[0] || !rects[1]) return; if (!rects[0] || !rects[1]) return;
const [itemRect, containerRect] = rects; const [itemRect, containerRect] = rects;
// 计算元素在容器内的相对位置 // 计算元素在容器内的相对位置
const position = itemRect.top - containerRect.top; const position = itemRect.top - containerRect.top;
// 设置滚动位置(增加20px的缓冲距离) // 设置滚动位置(增加20px的缓冲距离)
scrollTop.value = position + 20; scrollTop.value = position + 20;
}); });
}; };
// 保存订阅消息 // 保存订阅消息
const getWxNotificationFn = async (notificationDate, wxTemplateId, babyId) => { const getWxNotificationFn = async (notificationDate, wxTemplateId, babyId) => {
...@@ -464,16 +516,16 @@ const getInfoFn = async () => { ...@@ -464,16 +516,16 @@ const getInfoFn = async () => {
uni.setStorageSync('dueDate', data.dueDate) uni.setStorageSync('dueDate', data.dueDate)
// 新增:调用滚动方法 // 新增:调用滚动方法
scrollToCurrentWeek() scrollToCurrentWeek()
} else { } else {
uni.showToast({ uni.showToast({
title: message, title: message,
icon: "none", icon: "none",
}); });
} }
} }
// 获取banner图 // 获取banner图
...@@ -495,43 +547,43 @@ const getSettingFn = () => { ...@@ -495,43 +547,43 @@ const getSettingFn = () => {
success(res) { success(res) {
// console.log(res.authSetting, '授权信息') // console.log(res.authSetting, '授权信息')
console.log(res.subscriptionsSetting, '订阅信息') console.log(res.subscriptionsSetting, '订阅信息')
if(res.subscriptionsSetting.itemSettings){ if (res.subscriptionsSetting.itemSettings) {
isWxNotification.value = false isWxNotification.value = false
console.log("🚀 ~ success ~ isWxNotification111:", isWxNotification.value) console.log("🚀 ~ success ~ isWxNotification111:", isWxNotification.value)
} else { } else {
isWxNotification.value = true isWxNotification.value = true
console.log("🚀 ~ success ~ isWxNotification222:", isWxNotification.value) console.log("🚀 ~ success ~ isWxNotification222:", isWxNotification.value)
} }
} }
}) })
} }
// 提示弹窗回调 // 提示弹窗回调
const onBabyChange= ()=>{ const onBabyChange = () => {
publicFn() publicFn()
} }
// 公共函数 // 公共函数
const publicFn = () => { const publicFn = () => {
console.log("🚀 ~ onShow ~ userStore:", userStore.babyInfo) console.log("🚀 ~ onShow ~ userStore:", userStore.babyInfo)
const babyInfo = userStore.babyInfo const babyInfo = userStore.babyInfo
if(babyInfo && babyInfo.babyStage == 1){ if (babyInfo && babyInfo.babyStage == 1) {
isTip.value = false isTip.value = false
babyId.value = userStore.babyInfo?.content?.id babyId.value = userStore.babyInfo?.content?.id
getSettingFn() getSettingFn()
// 获取banner图 // 获取banner图
postnatalJSONFn() postnatalJSONFn()
// 获取信息 // 获取信息
getInfoFn() getInfoFn()
} else{ } else {
isTip.value = true isTip.value = true
} }
} }
onShow(async () => { onShow(async () => {
await userStore.loadBabyInfo() await userStore.loadBabyInfo()
console.log('宝宝信息加载完成:', userStore.babyInfo) console.log('宝宝信息加载完成:', userStore.babyInfo)
publicFn() publicFn()
}) })
onMounted(() => { onMounted(() => {
isClickClose.value = false
md.sensorLogTake({ md.sensorLogTake({
xcxPage: "小程序页面浏览事件", xcxPage: "小程序页面浏览事件",
pageName: "产检提醒首页" pageName: "产检提醒首页"
...@@ -561,8 +613,9 @@ onMounted(() => { ...@@ -561,8 +613,9 @@ onMounted(() => {
align-items: center; align-items: center;
margin-top: 50rpx; margin-top: 50rpx;
font-weight: 500; font-weight: 500;
flex-shrink: 0; flex-shrink: 0;
height: 32rpx; height: 32rpx;
.info-c { .info-c {
width: 2rpx; width: 2rpx;
height: 22rpx; height: 22rpx;
...@@ -582,7 +635,8 @@ onMounted(() => { ...@@ -582,7 +635,8 @@ onMounted(() => {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin-bottom: 30rpx; margin-bottom: 30rpx;
flex-shrink: 0; flex-shrink: 0;
.btn-item { .btn-item {
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -813,6 +867,7 @@ onMounted(() => { ...@@ -813,6 +867,7 @@ onMounted(() => {
height: 177rpx; height: 177rpx;
border-radius: 12rpx; border-radius: 12rpx;
overflow: hidden; overflow: hidden;
.banner-img { .banner-img {
width: 100%; width: 100%;
height: 100%; height: 100%;
......
...@@ -107,13 +107,13 @@ export default { ...@@ -107,13 +107,13 @@ export default {
}); });
}, },
}, },
// onShareAppMessage() { onShareAppMessage() {
// return { return {
// title: this.shareTitle, title: this.shareTitle,
// path: '/pages/product/product?productId=' + this.productId + '&skuId=' + this.skuId + '&contentImg=' + this.contentImg + '&contentImgLen=' + this.contentImgLen + '&shareTitle=' + this.shareTitle + '&shareImg=' + this.shareImg + '&tabName=' + this.tabName+'&title=' + this.title, path: '/pages/product/product?productId=' + this.productId + '&skuId=' + this.skuId + '&contentImg=' + this.contentImg + '&contentImgLen=' + this.contentImgLen + '&shareTitle=' + this.shareTitle + '&shareImg=' + this.shareImg + '&tabName=' + this.tabName+'&title=' + this.title,
// imageUrl: this.shareImg imageUrl: this.shareImg
// } }
// }, },
} }
</script> </script>
......
...@@ -459,11 +459,14 @@ const onRemind = () => { ...@@ -459,11 +459,14 @@ const onRemind = () => {
} }
// 如果授权就不弹出提醒 // 如果授权就不弹出提醒
showPicker.value = isWxNotification.value ? true : false showPicker.value = isWxNotification.value ? true : false
} }
// 提醒关闭 // 提醒关闭
const close = () => { const close = () => {
showPicker.value = false; showPicker.value = false;
} }
// 选择提醒事件 // 选择提醒事件
...@@ -472,6 +475,7 @@ const handleChange = (e) => { ...@@ -472,6 +475,7 @@ const handleChange = (e) => {
} }
// 确认选择 // 确认选择
const handleConfirm = () => { const handleConfirm = () => {
selectedValue.value = options[pickerValue.value].id; selectedValue.value = options[pickerValue.value].id;
console.log(selectedValue.value, infoData.value.wxTemplateId, babyId.value) console.log(selectedValue.value, infoData.value.wxTemplateId, babyId.value)
close(); close();
......
...@@ -380,6 +380,11 @@ const showDatePicker = () => { ...@@ -380,6 +380,11 @@ const showDatePicker = () => {
}); });
console.log('显示日期选择器') console.log('显示日期选择器')
md.sensorPopLogTake({
xcxPopExposure: "true",
toolName: "生长曲线",
popName: "选择本次测评日期弹窗"
});
showDatePickerPopup.value = true showDatePickerPopup.value = true
} }
......
...@@ -164,6 +164,8 @@ onShareAppMessage((options) => { ...@@ -164,6 +164,8 @@ onShareAppMessage((options) => {
console.log('分享数据:', share.value) console.log('分享数据:', share.value)
console.log('分享选项:', options) console.log('分享选项:', options)
debugger;
md.sensorLogTake({ md.sensorLogTake({
xcxClick: "suyuan202508H5Click", xcxClick: "suyuan202508H5Click",
pageName: "星妈会分享页", pageName: "星妈会分享页",
......
...@@ -196,6 +196,8 @@ import { onPageScroll, onShow } from "@dcloudio/uni-app"; ...@@ -196,6 +196,8 @@ import { onPageScroll, onShow } from "@dcloudio/uni-app";
import { showLoading, hideLoading, jump, JumpType } from '../../utils/index.js' import { showLoading, hideLoading, jump, JumpType } from '../../utils/index.js'
import { useXingmaLabStore } from '../../stores/xingmaLab' import { useXingmaLabStore } from '../../stores/xingmaLab'
import Xingmalabnotimepop from '../../components/xingmaLab/Xingmalabnotimepop.vue' import Xingmalabnotimepop from '../../components/xingmaLab/Xingmalabnotimepop.vue'
import md from '../../md';
// 定义组件名称 // 定义组件名称
defineOptions({ defineOptions({
name: 'XingmaLab' name: 'XingmaLab'
...@@ -309,6 +311,11 @@ const handleImageLoad = (e, item, index) => { ...@@ -309,6 +311,11 @@ const handleImageLoad = (e, item, index) => {
} }
onShow(async () => { onShow(async () => {
md.sensorLogTake({
xcxPage: "星妈实验室首页页面浏览",
pageName: "星妈实验室首页",
});
console.log('onshow') console.log('onshow')
await xingmaLabStore.loadXingmaInfo(); await xingmaLabStore.loadXingmaInfo();
......
...@@ -81,8 +81,8 @@ ...@@ -81,8 +81,8 @@
height: 200rpx; height: 200rpx;
overflow: hidden; overflow: hidden;
image { image {
width: 54rpx; width: 58rpx;
height: 54rpx; height: 58rpx;
} }
} }
} }
......
...@@ -24,13 +24,13 @@ ...@@ -24,13 +24,13 @@
<view class="footer-item blur-bg" @click="gofeihe()"> <view class="footer-item blur-bg" @click="gofeihe()">
<view> <view>
<image <image
style="width: 59rpx; height: 59rpx" style="width: 64rpx; height: 64rpx"
src="@/assets/reservation-images/twitter.png" src="@/assets/reservation-images/twitter_new.png"
mode="widthFix" mode="widthFix"
> >
</image> </image>
</view> </view>
<view>了解飞鹤</view> <view style="margin-top:4rpx;">了解飞鹤</view>
</view> </view>
<view <view
class="footer-item blur-bg" class="footer-item blur-bg"
...@@ -38,11 +38,11 @@ ...@@ -38,11 +38,11 @@
> >
<view> <view>
<image <image
src="@/assets/reservation-images/briefcase.png" src="@/assets/reservation-images/briefcase_new.png"
mode="widthFix" mode="widthFix"
></image> ></image>
</view> </view>
<view>现在预约</view> <view style="margin-top:4rpx;">现在预约</view>
</view> </view>
<view <view
class="footer-item blur-bg" class="footer-item blur-bg"
...@@ -50,11 +50,11 @@ ...@@ -50,11 +50,11 @@
> >
<view> <view>
<image <image
src="@/assets/reservation-images/calendar.png" src="@/assets/reservation-images/calendar_new.png"
mode="widthFix" mode="widthFix"
></image> ></image>
</view> </view>
<view>预约记录</view> <view style="margin-top:4rpx;">预约记录</view>
</view> </view>
</view> </view>
<!-- 底部箭头 --> <!-- 底部箭头 -->
...@@ -98,7 +98,6 @@ const changeCurrent = () => { ...@@ -98,7 +98,6 @@ const changeCurrent = () => {
const handleScrollChange = (e) => { const handleScrollChange = (e) => {
console.log(e) console.log(e)
console.log(123)
current.value = e.detail.current current.value = e.detail.current
} }
......
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import { myObj } from "../mock/my";
import { fetchUserJSON } from "@/api/user"; import { fetchUserJSON } from "@/api/user";
export const usePageCfgStore = defineStore("pageCfg", { export const usePageCfgStore = defineStore("pageCfg", {
......
...@@ -58,8 +58,13 @@ class ExposureTracker { ...@@ -58,8 +58,13 @@ class ExposureTracker {
const isVisible = this.isElementInViewport(res, scrollTop); const isVisible = this.isElementInViewport(res, scrollTop);
if (isVisible && !value.isExposed) { if (isVisible && !value.isExposed) {
value.isExposed = true; value.isExposed = true;
// 触发埋点 // 触发埋点
md.sensorLogTake(value.logParams); if(value.logParams.xcxComponentExposure){
md.sensorComponentLogTake(value.logParams);
}else{
md.sensorLogTake(value.logParams);
}
} }
}); });
}); });
......
...@@ -36,7 +36,11 @@ export function jump({ type, url, extra = {} }) { ...@@ -36,7 +36,11 @@ export function jump({ type, url, extra = {} }) {
console.log("jumpParams:", jumpParams); console.log("jumpParams:", jumpParams);
uni.navigateToMiniProgram(jumpParams); if(extra.embedded){
uni.openEmbeddedMiniProgram(jumpParams);
}else{
uni.navigateToMiniProgram(jumpParams);
}
break; break;
case JumpType.H5: case JumpType.H5:
// 跳转到 https 网络链接 // 跳转到 https 网络链接
......
...@@ -10,6 +10,11 @@ ...@@ -10,6 +10,11 @@
xcxClick: '品牌故事-首屏页面点击', xcxClick: '品牌故事-首屏页面点击',
pageName: '品牌故事-首屏页面', pageName: '品牌故事-首屏页面',
buttonName: `背景图-${swiperNameList[index]}` buttonName: `背景图-${swiperNameList[index]}`
}" :data-comlog="{
xcxComponentClick: 'true',
pageName: '品牌故事页',
componentName: '品牌故事页banner',
componentContent: item.title || ''
}" :data-link="item.link" @tap="jumpLink(item.link, item.videoUrl, $event)" class="b-img" }" :data-link="item.link" @tap="jumpLink(item.link, item.videoUrl, $event)" class="b-img"
:src="$baseUrl + item.url"> :src="$baseUrl + item.url">
</image> </image>
...@@ -48,6 +53,11 @@ ...@@ -48,6 +53,11 @@
xcxClick: '品牌故事-次屏页面点击', xcxClick: '品牌故事-次屏页面点击',
pageName: '品牌故事-首屏页面', pageName: '品牌故事-首屏页面',
buttonName: '腰部品牌Video' buttonName: '腰部品牌Video'
}" :data-comlog="{
xcxComponentClick: 'true',
pageName: '品牌故事页',
componentName: '品牌故事视频',
componentContent: video1Channel.title || ''
}" @tap="openChannel(video1Channel, $event)" class="videoposter" :src="$baseUrl + video1Channel.posterUrl"> }" @tap="openChannel(video1Channel, $event)" class="videoposter" :src="$baseUrl + video1Channel.posterUrl">
</image> </image>
...@@ -61,6 +71,11 @@ ...@@ -61,6 +71,11 @@
xcxClick: '品牌故事-次屏页面点击', xcxClick: '品牌故事-次屏页面点击',
pageName: '品牌故事-次屏页面', pageName: '品牌故事-次屏页面',
buttonName: `${item}` buttonName: `${item}`
}" :data-comlog="{
xcxComponentClick: 'true',
pageName: '品牌故事页',
componentName: '飞鹤产品家族',
componentContent: '产品家族切换分类-' + item
}" :class="channelTabIndex === index ? 'tabitem tabActive' : 'tabitem'" v-for="(item, index) in productTabList" }" :class="channelTabIndex === index ? 'tabitem tabActive' : 'tabitem'" v-for="(item, index) in productTabList"
:key="index" :id="'tab-' + index"> :key="index" :id="'tab-' + index">
{{ item }} {{ item }}
...@@ -79,6 +94,11 @@ ...@@ -79,6 +94,11 @@
xcxClick: '品牌故事-次屏页面点击', xcxClick: '品牌故事-次屏页面点击',
pageName: '品牌故事-次屏页面', pageName: '品牌故事-次屏页面',
buttonName: `${productTabList[channelTabIndex] + '中的' + infoItem.title}+'商品'` buttonName: `${productTabList[channelTabIndex] + '中的' + infoItem.title}+'商品'`
}" :data-comlog="{
xcxComponentClick: 'true',
pageName: '品牌故事页',
componentName: '飞鹤产品家族',
componentContent: '产品家族商品-' + infoItem.desc
}" @tap="jumpProduct(infoItem, $event)"> }" @tap="jumpProduct(infoItem, $event)">
<view class="flexbox"> <view class="flexbox">
<view class="infotitle"> <view class="infotitle">
...@@ -98,6 +118,11 @@ ...@@ -98,6 +118,11 @@
xcxClick: '品牌故事-次屏页面点击', xcxClick: '品牌故事-次屏页面点击',
pageName: '品牌故事-次屏页面', pageName: '品牌故事-次屏页面',
buttonName: `${productTabList[channelTabIndex] + '中的' + infoItem.title}+'商品'` buttonName: `${productTabList[channelTabIndex] + '中的' + infoItem.title}+'商品'`
}" :data-comlog="{
xcxComponentClick: 'true',
pageName: '品牌故事页',
componentName: '飞鹤产品家族',
componentContent: '产品家族商品-' + infoItem.desc
}" @tap="jumpProduct(infoItem, $event)"> }" @tap="jumpProduct(infoItem, $event)">
<view class="flexbox"> <view class="flexbox">
<view class="infotitle"> <view class="infotitle">
...@@ -120,8 +145,12 @@ ...@@ -120,8 +145,12 @@
:src="$baseUrl + video2Channel.videoUrl" :autoplay="false" :src="$baseUrl + video2Channel.videoUrl" :autoplay="false"
:poster="video2Channel.posterUrl ? $baseUrl + video2Channel.posterUrl : ''" object-fit="cover" :poster="video2Channel.posterUrl ? $baseUrl + video2Channel.posterUrl : ''" object-fit="cover"
@loadedmetadata="onVideoLoadedMeta" @play="onVideo2Play"></video> @loadedmetadata="onVideoLoadedMeta" @play="onVideo2Play"></video>
<image v-else class="videoposter" @tap="openChannel(video2Channel, $event)" <image v-else class="videoposter" :data-comlog="{
:src="$baseUrl + video2Channel.posterUrl"> xcxComponentClick: 'true',
pageName: '品牌故事页',
componentName: '品牌故事视频',
componentContent: video2Channel.title || ''
}" @tap="openChannel(video2Channel, $event)" :src="$baseUrl + video2Channel.posterUrl">
</image> </image>
</view> </view>
<view id="thirdScreen" class="ipbox" <view id="thirdScreen" class="ipbox"
...@@ -142,7 +171,7 @@ ...@@ -142,7 +171,7 @@
{{ ipDesc }} {{ ipDesc }}
</view> </view>
<view class="ipflex"> <view class="ipflex">
<view class="ipbg ip1"> <view class="ipbg ip1" id="ip1" @tap="ipTapEvent(1, $event)">
<store-product appid="wx1ad0903b95889ea1" product-id="10000239570622" custom-content="true"> <store-product appid="wx1ad0903b95889ea1" product-id="10000239570622" custom-content="true">
<image :data-log="{ <image :data-log="{
xcxClick: '品牌故事-三屏页面点击', xcxClick: '品牌故事-三屏页面点击',
...@@ -154,7 +183,7 @@ ...@@ -154,7 +183,7 @@
</view> </view>
<view class="ipright"> <view class="ipright">
<view class="ipbg ip2"> <view class="ipbg ip2" id="ip2" @tap="ipTapEvent(2, $event)">
<store-product appid="wx1ad0903b95889ea1" product-id="10000239356280" <store-product appid="wx1ad0903b95889ea1" product-id="10000239356280"
custom-content="true"> custom-content="true">
<image :data-log="{ <image :data-log="{
...@@ -166,7 +195,7 @@ ...@@ -166,7 +195,7 @@
</store-product> </store-product>
</view> </view>
<view style="display: flex;justify-content: space-between;margin-top: 20rpx;"> <view style="display: flex;justify-content: space-between;margin-top: 20rpx;">
<view class="ipbg ip3"> <view class="ipbg ip3" id="ip3" @tap="ipTapEvent(3, $event)">
<image :data-log="{ <image :data-log="{
xcxClick: '品牌故事-三屏页面点击', xcxClick: '品牌故事-三屏页面点击',
pageName: '品牌故事-三屏页面', pageName: '品牌故事-三屏页面',
...@@ -175,7 +204,7 @@ ...@@ -175,7 +204,7 @@
</image> </image>
</view> </view>
<view class="ipbg ip4"> <view class="ipbg ip4" id="ip4" @tap="ipTapEvent(4, $event)">
<image :data-log="{ <image :data-log="{
xcxClick: '品牌故事-三屏页面点击', xcxClick: '品牌故事-三屏页面点击',
pageName: '品牌故事-三屏页面', pageName: '品牌故事-三屏页面',
...@@ -195,12 +224,17 @@ ...@@ -195,12 +224,17 @@
<!-- <text class="subtitle">关注祖国下一代的营养、教育和陪伴</text> --> <!-- <text class="subtitle">关注祖国下一代的营养、教育和陪伴</text> -->
<view class="channelscroll"> <view class="channelscroll">
<view class="box"> <view class="box">
<view class="infobox" :key="index" v-for="(infoItem, index) in esgInfoList" <view class="infobox" :key="index" v-for="(infoItem, index) in esgInfoList" :id="'esg' + (index + 1)"
:style="{ background: `url(${$baseUrl}brandpage/esgItemBg.png) no-repeat center/505rpx 638rpx` }" :style="{ background: `url(${$baseUrl}brandpage/esgItemBg.png) no-repeat center/505rpx 638rpx` }"
:data-log="{ :data-log="{
xcxClick: `品牌故事-三屏页面点击`, xcxClick: `品牌故事-三屏页面点击`,
pageName: `品牌故事-三屏页面ESG点击`, pageName: `品牌故事-三屏页面ESG点击`,
buttonName: `${index + 1}-${infoItem.desc}` buttonName: `${index + 1}-${infoItem.desc}`
}" :data-comlog="{
xcxComponentClick: 'true',
pageName: '品牌故事页',
componentName: '飞鹤ESG',
componentContent: infoItem.desc
}" @tap="jumpLink(infoItem.link, false, $event)"> }" @tap="jumpLink(infoItem.link, false, $event)">
<image class="infoimg" :src="$baseUrl + infoItem.bgUrl"></image> <image class="infoimg" :src="$baseUrl + infoItem.bgUrl"></image>
<view class="infotitle">{{ infoItem.desc }}</view> <view class="infotitle">{{ infoItem.desc }}</view>
...@@ -338,6 +372,7 @@ export default { ...@@ -338,6 +372,7 @@ export default {
video2Channel: {}, video2Channel: {},
currentPlayingVideo: null, // 当前正在播放的视频标识 currentPlayingVideo: null, // 当前正在播放的视频标识
videoContexts: {}, // 存储视频上下文,使用id作为key videoContexts: {}, // 存储视频上下文,使用id作为key
ipExStr:['鹤小飞商品', '鹤小飞商品', '鹤小飞', '鹤小飞'],
} }
}, },
mounted() { mounted() {
...@@ -356,572 +391,6 @@ export default { ...@@ -356,572 +391,6 @@ export default {
methods: { methods: {
async initBrandInfo() { async initBrandInfo() {
const { data } = await fetchBrandJSON(); const { data } = await fetchBrandJSON();
// const data = {
// "swiperList": [
// {
// "videoUrl": "https://course.feihe.com/momclub-picture/brandpage/bannerVideo.mp4",
// "link": {},
// "url": "brandpage/Banner41.png"
// },
// {
// "link": {
// "extra": {},
// "type": 3,
// "url": "https://mp.weixin.qq.com/s/0eMxbWB3R_0g06HZPUEj5Q"
// },
// "url": "brandpage/Banner42.png"
// },
// {
// "link": {
// "extra": {},
// "type": 3,
// "url": "https://factory.feihe.com/user/#/web"
// },
// "url": "brandpage/Banner44.png"
// }
// ],
// "video2Channel": {
// "finderUserName": "",
// "videoUrl": "brandpage/videoChannel/video2Channel/V1/1.mp4",
// "posterUrl": "",
// "feedId": ""
// },
// "product": [
// [
// {
// "productId": "",
// "shareTitle": "星飞帆经典 3段",
// "link": "",
// "contentImgLen": 20,
// "title": "超凡 吸收",
// "skuId": "",
// "shareImg": "brandpage/products/share/0/0_1.jpg",
// "contentImg": "0-1",
// "desc": "星飞帆经典 3段",
// "bgUrl": "brandpage/pic_0_1.png"
// },
// {
// "productId": "",
// "shareTitle": "星飞帆卓睿 3段",
// "link": "",
// "contentImgLen": 25,
// "title": "顶配 脑育",
// "skuId": "",
// "shareImg": "brandpage/products/share/0/0_2.jpg",
// "contentImg": "0-2",
// "desc": "星飞帆卓睿 3段",
// "bgUrl": "brandpage/pic_0_2.png"
// },
// {
// "productId": "",
// "shareTitle": "星飞帆卓耀 3段",
// "link": "",
// "contentImgLen": 28,
// "title": "亲和 自护",
// "skuId": "",
// "shareImg": "brandpage/products/share/0/0_3.jpg",
// "contentImg": "0-3",
// "desc": "星飞帆卓耀 3段",
// "bgUrl": "brandpage/pic_0_3.png"
// },
// {
// "productId": "749098220531287139",
// "shareTitle": "爱本跃动蛋白营养粉",
// "link": "",
// "contentImgLen": 15,
// "title": " 4维 效力",
// "skuId": "749098220531287140",
// "shareImg": "brandpage/products/share/0/0_4.jpg",
// "contentImg": "0-4",
// "desc": "爱本跃动蛋白营养粉",
// "bgUrl": "brandpage/pic_0_4.png"
// },
// {
// "productId": "693279214116405585",
// "shareTitle": "高钙奶酪泡芙脆",
// "link": "",
// "contentImgLen": 15,
// "title": "高钙 爆脆",
// "skuId": "693279214116405586",
// "shareImg": "brandpage/products/share/0/0_5.jpg",
// "contentImg": "0-5",
// "desc": "高钙奶酪泡芙脆",
// "bgUrl": "brandpage/pic_0_5.png"
// },
// {
// "productId": "543558664688883066",
// "shareTitle": "北纬47度黄糯玉米",
// "link": "",
// "contentImgLen": 5,
// "title": "软糯 Q弹",
// "skuId": "543560605494007100",
// "shareImg": "brandpage/products/share/0/0_6.jpg",
// "contentImg": "0-6",
// "desc": "北纬47度黄糯玉米",
// "bgUrl": "brandpage/pic_0_6.png"
// }
// ],
// [
// {
// "productId": "",
// "shareTitle": "星飞帆经典 3段",
// "link": "",
// "contentImgLen": 20,
// "title": "超凡 吸收",
// "skuId": "",
// "shareImg": "brandpage/products/share/1/1_1.jpg",
// "contentImg": "1-1",
// "desc": "星飞帆经典 3段",
// "bgUrl": "brandpage/pic_1_1.png"
// },
// {
// "productId": "",
// "shareTitle": "星飞帆卓睿 3段",
// "link": "",
// "contentImgLen": 25,
// "title": "顶配 脑育",
// "skuId": "",
// "shareImg": "brandpage/products/share/1/1_2.jpg",
// "contentImg": "1-2",
// "desc": "星飞帆卓睿 3段",
// "bgUrl": "brandpage/pic_1_2.png"
// },
// {
// "productId": "",
// "shareTitle": "星飞帆卓耀 3段",
// "link": "",
// "contentImgLen": 28,
// "title": "亲和 自护",
// "skuId": "",
// "shareImg": "brandpage/products/share/1/1_3.jpg",
// "contentImg": "1-3",
// "desc": "星飞帆卓耀 3段",
// "bgUrl": "brandpage/pic_1_3.png"
// },
// {
// "productId": "",
// "shareTitle": "星飞帆卓睿A2奶源",
// "link": "",
// "contentImgLen": 20,
// "title": "顶配 A 2",
// "skuId": "",
// "shareImg": "brandpage/products/share/1/1_4.jpg",
// "contentImg": "1-4",
// "desc": "星飞帆卓睿A2奶源",
// "bgUrl": "brandpage/pic_1_4.png"
// },
// {
// "productId": "",
// "shareTitle": "臻稚卓蓓 3段",
// "link": "",
// "contentImgLen": 28,
// "title": "活性 有机",
// "skuId": "",
// "shareImg": "brandpage/products/share/1/1_5.jpg",
// "contentImg": "1-5",
// "desc": "臻稚卓蓓 3段",
// "bgUrl": "brandpage/pic_1_5.png"
// },
// {
// "productId": "",
// "shareTitle": "臻爱倍护 3段",
// "link": "",
// "contentImgLen": 20,
// "title": "高端 乳铁",
// "skuId": "",
// "shareImg": "brandpage/products/share/1/1_6.jpg",
// "contentImg": "1-6",
// "desc": "臻爱倍护 3段",
// "bgUrl": "brandpage/pic_1_6.png"
// }
// ],
// [
// {
// "productId": "739634042657637394",
// "shareTitle": "飞鹤臻贵儿童配方奶粉",
// "link": "",
// "contentImgLen": 10,
// "title": "向上 成长",
// "skuId": "739635029460743612",
// "shareImg": "brandpage/products/share/4/4_1.jpg",
// "contentImg": "5-11",
// "desc": "飞鹤臻贵儿童配方奶粉",
// "bgUrl": "brandpage/pic_5_1.png"
// },
// {
// "productId": "770087385697019251",
// "shareTitle": "飞鹤臻贵悦智配方奶粉",
// "link": "",
// "contentImgLen": 10,
// "title": "悦享 活力",
// "skuId": "770087385697019252",
// "shareImg": "brandpage/products/share/4/4_2.jpg",
// "contentImg": "5-21",
// "desc": "飞鹤臻贵悦智配方奶粉",
// "bgUrl": "brandpage/pic_5_2.png"
// },
// {
// "productId": "584206109842248681",
// "shareTitle": "飞鹤牧场浓厚纯牛奶",
// "link": "",
// "contentImgLen": 10,
// "title": "浓厚 醇香",
// "skuId": "743707906122896598",
// "shareImg": "brandpage/products/share/4/4_3.jpg",
// "contentImg": "5-31",
// "desc": "飞鹤牧场浓厚纯牛奶",
// "bgUrl": "brandpage/pic_5_3.png"
// },
// {
// "productId": "411619746805715934",
// "shareTitle": "六水香长粒香大米",
// "link": "",
// "contentImgLen": 8,
// "title": "当季 新米",
// "skuId": "411619746805715935",
// "shareImg": "brandpage/products/share/4/4_4.jpg",
// "contentImg": "5-41",
// "desc": "六水香长粒香大米",
// "bgUrl": "brandpage/pic_5_4.png"
// },
// {
// "productId": "675921531863073227",
// "shareTitle": "红富士晒晒苹果肉",
// "link": "",
// "contentImgLen": 10,
// "title": "三蒸 三晒",
// "skuId": "675921531863073230",
// "shareImg": "brandpage/products/share/4/4_5.jpg",
// "contentImg": "5-51",
// "desc": "红富士晒晒苹果肉",
// "bgUrl": "brandpage/pic_5_5.png"
// },
// {
// "productId": "599340570081015525",
// "shareTitle": "内衣专护洗衣液",
// "link": "",
// "contentImgLen": 11,
// "title": "深层 洁净",
// "skuId": "599340570081015526",
// "shareImg": "brandpage/products/share/4/4_6.jpg",
// "contentImg": "5-61",
// "desc": "内衣专护洗衣液",
// "bgUrl": "brandpage/pic_5_6.png"
// }
// ],
// [
// {
// "productId": "545768683314537529",
// "shareTitle": "北纬47度白甜糯玉米",
// "link": "",
// "contentImgLen": 5,
// "title": "含有 叶酸",
// "skuId": "545770687080957074",
// "shareImg": "brandpage/products/share/4/4_1.jpg",
// "contentImg": "4-1",
// "desc": "北纬47度白甜糯玉米",
// "bgUrl": "brandpage/pic_4_1.png"
// },
// {
// "productId": "555503303308649561",
// "shareTitle": "北纬47度黄糯玉米",
// "link": "",
// "contentImgLen": 5,
// "title": "软糯 Q弹",
// "skuId": "555503303308649562",
// "shareImg": "brandpage/products/share/4/4_2.jpg",
// "contentImg": "4-2",
// "desc": "北纬47度黄糯玉米",
// "bgUrl": "brandpage/pic_4_2.png"
// },
// {
// "productId": "469675861496440509",
// "shareTitle": "北纬47度低GI水果玉米粒袋装",
// "link": "",
// "contentImgLen": 5,
// "title": "开袋 即食",
// "skuId": "469675861496440510",
// "shareImg": "brandpage/products/share/4/4_3.jpg",
// "contentImg": "4-3",
// "desc": "北纬47度低GI\n水果玉米粒袋装",
// "bgUrl": "brandpage/pic_4_3.png"
// },
// {
// "productId": "733411972814471679",
// "shareTitle": "北纬47度东北烧烤味玉米段",
// "link": "",
// "contentImgLen": 5,
// "title": "秘制 工艺",
// "skuId": "733468301522154622",
// "shareImg": "brandpage/products/share/4/4_4.jpg",
// "contentImg": "4-4",
// "desc": "北纬47度东北\n烧烤味玉米段",
// "bgUrl": "brandpage/pic_4_4.png"
// },
// {
// "productId": "701593489939273114",
// "shareTitle": "N47°植物酵素乳",
// "link": "",
// "contentImgLen": 10,
// "title": "0乳糖 低GI",
// "skuId": "701593489939273115",
// "shareImg": "brandpage/products/share/4/4_5.jpg",
// "contentImg": "4-5",
// "desc": "N47°植物酵素乳",
// "bgUrl": "brandpage/pic_4_5.png"
// },
// {
// "productId": "705230699873112222",
// "shareTitle": "N47°水果玉米汁",
// "link": "",
// "contentImgLen": 8,
// "title": "轻卡 低GI",
// "skuId": "705230699873112223",
// "shareImg": "brandpage/products/share/4/4_6.jpg",
// "contentImg": "4-6",
// "desc": "N47°水果玉米汁",
// "bgUrl": "brandpage/pic_4_6.png"
// }
// ],
// [
// {
// "productId": "749098220531287139",
// "shareTitle": "爱本跃动蛋白营养粉",
// "link": "",
// "contentImgLen": 20,
// "title": " 4维 效力",
// "skuId": "749098220531287140",
// "shareImg": "brandpage/products/share/2/2_1.jpg",
// "contentImg": "2-1",
// "desc": "爱本跃动蛋白营养粉",
// "bgUrl": "brandpage/pic_2_1.png"
// },
// {
// "productId": "748659115456528889",
// "shareTitle": "爱本牛初乳",
// "link": "",
// "contentImgLen": 15,
// "title": "初乳 精华",
// "skuId": "7748659115456528890",
// "shareImg": "brandpage/products/share/2/2_2.jpg",
// "contentImg": "2-2",
// "desc": "爱本牛初乳",
// "bgUrl": "brandpage/pic_2_2.png"
// },
// {
// "productId": "768991288915277214",
// "shareTitle": "爱本每日蛋白营养糊",
// "link": "",
// "contentImgLen": 15,
// "title": "每日 蛋白",
// "skuId": "768991288915277215",
// "shareImg": "brandpage/products/share/2/2_3.jpg",
// "contentImg": "2-3",
// "desc": "爱本每日蛋白营养糊",
// "bgUrl": "brandpage/pic_2_3.png"
// },
// {
// "productId": "767546274051183809",
// "shareTitle": "爱本纤纤益生菌羽衣甘蓝蛋白粉",
// "link": "",
// "contentImgLen": 10,
// "title": "腰腹 燃脂",
// "skuId": "767546274051183810",
// "shareImg": "brandpage/products/share/2/2_4.jpg",
// "contentImg": "2-4",
// "desc": "爱本纤纤益生菌\n羽衣甘蓝蛋白粉",
// "bgUrl": "brandpage/pic_2_4.png"
// },
// {
// "productId": "749443379821195324",
// "shareTitle": "爱本参芝初乳肽",
// "link": "",
// "contentImgLen": 10,
// "title": "药食 同源",
// "skuId": "749443379821195325",
// "shareImg": "brandpage/products/share/2/2_5.jpg",
// "contentImg": "2-5",
// "desc": "爱本参芝初乳肽",
// "bgUrl": "brandpage/pic_2_5.png"
// },
// {
// "productId": "753354110711035152",
// "shareTitle": "爱本悦眠功能粉",
// "link": "",
// "contentImgLen": 15,
// "title": "一夜 天亮",
// "skuId": "753354110711035153",
// "shareImg": "brandpage/products/share/2/2_6.jpg",
// "contentImg": "2-6",
// "desc": "爱本悦眠功能粉",
// "bgUrl": "brandpage/pic_2_6.png"
// }
// ],
// [
// {
// "productId": "759563658744492290",
// "shareTitle": "爱上吃菜乳酪",
// "link": "",
// "contentImgLen": 10,
// "title": "高钙 高纤",
// "skuId": "759563658744492293",
// "shareImg": "brandpage/products/share/3/3_1.jpg",
// "contentImg": "3-1",
// "desc": "爱上吃菜乳酪",
// "bgUrl": "brandpage/pic_3_1.png"
// },
// {
// "productId": "693279214116405585",
// "shareTitle": "高钙奶酪泡芙脆",
// "link": "",
// "contentImgLen": 15,
// "title": "高钙 爆脆",
// "skuId": "693279214116405586",
// "shareImg": "brandpage/products/share/3/3_2.jpg",
// "contentImg": "3-2",
// "desc": "高钙奶酪泡芙脆",
// "bgUrl": "brandpage/pic_3_2.png"
// },
// {
// "productId": "772183835488032281",
// "shareTitle": "高纤黑巧乳酪",
// "link": "",
// "contentImgLen": 10,
// "title": "醇香 黑巧",
// "skuId": "772183835488032282",
// "shareImg": "brandpage/products/share/3/3_3.jpg",
// "contentImg": "3-3",
// "desc": "高纤黑巧乳酪",
// "bgUrl": "brandpage/pic_3_3.png"
// },
// {
// "productId": "716141706338247497",
// "shareTitle": "超新星水果奶酪",
// "link": "",
// "contentImgLen": 15,
// "title": "10倍 奶钙",
// "skuId": "716141706338247498",
// "shareImg": "brandpage/products/share/3/3_4.jpg",
// "contentImg": "3-4",
// "desc": "超新星水果奶酪",
// "bgUrl": "brandpage/pic_3_4.png"
// },
// {
// "productId": "717871366421930449",
// "shareTitle": "厚切流心芝士片",
// "link": "",
// "contentImgLen": 10,
// "title": "浓郁 爆浆",
// "skuId": "717871366421930450",
// "shareImg": "brandpage/products/share/3/3_5.jpg",
// "contentImg": "3-5",
// "desc": "厚切流心芝士片",
// "bgUrl": "brandpage/pic_3_5.png"
// },
// {
// "productId": "551135905055024574",
// "shareTitle": "嚼奶粉乳酪",
// "link": "",
// "contentImgLen": 10,
// "title": "洁净 配方",
// "skuId": "596810081919086853",
// "shareImg": "brandpage/products/share/3/3_6.jpg",
// "contentImg": "3-6",
// "desc": "嚼奶粉乳酪",
// "bgUrl": "brandpage/pic_3_6.png"
// }
// ]
// ],
// "videoUrl": "https://course.feihe.com/momclub-picture/brandpage/banner_1%E6%85%A2%E4%BA%BA%E8%8A%82x%E9%A3%9E%E9%B9%A4%2B-%2B%E5%9C%9FFINAL.mp4",
// "erqiPeizhi": {
// "ipImg4": "https://course.feihe.com/momclub-picture/brandpage/ip4.png",
// "title1": "飞鹤产品家族",
// "title2": "飞鹤品牌IP鹤小飞一家",
// "title3": "飞鹤ESG",
// "iphexiaofeiUrl": "https://course.feihe.com/momclub-picture/brandpage/v1_iphexiaofei.png",
// "ipImg1": "https://course.feihe.com/momclub-picture/brandpage/v1_ip1.png",
// "ipImg3": "https://course.feihe.com/momclub-picture/brandpage/ip3.png",
// "ipImg2": "https://course.feihe.com/momclub-picture/brandpage/v1_ip2.png"
// },
// "video1Channel": {
// "finderUserName": "sphgexisAi0pRGm",
// "videoUrl": "brandpage/videoChannel/video1Channel/V2/1.mp4",
// "posterUrl": "",
// "feedId": "export/UzFfAgtgekIEAQAAAAAABbEMmxr36QAAAAstQy6ubaLX4KHWvLEZgBPEgaJkYSYbLr6JzNPgMJp7tTZCYcYsIpU6Z0fgSnSE"
// },
// "esgInfoList": [
// [
// {
// "desc2": "飞鹤践行低碳节能,打造绿色产业链;承担龙头责任,引领行业创新发展;履行社会责任,构建共富共享生态",
// "link": {
// "extra": {},
// "type": 3,
// "url": "https://mp.weixin.qq.com/s/UebPA-2XenAdw7lTs2NttA"
// },
// "desc": "中国飞鹤发布2024年ESG报告",
// "bgUrl": "brandpage/esg1.png"
// },
// {
// "desc2": "中国飞鹤于2025年4月初在全国范围内启动一项总规模12亿元的生育补贴计划,为符合条件的孕期家庭提供不少于1500元的补贴",
// "link": {
// "extra": {},
// "type": 3,
// "url": "https://mp.weixin.qq.com/s/TpjCyjCf2Df3t1RMfi-JKQ"
// },
// "desc": "12亿元生育补贴计划",
// "bgUrl": "brandpage/esg2.png"
// },
// {
// "desc2": "百年大计,教育为本;教育大计,教师为本。近三年来,飞鹤已投入超过6500万元开展专项助教活动,惠及在职专任教师超过28万人",
// "link": {
// "extra": {},
// "type": 3,
// "url": "https://mp.weixin.qq.com/s/fvo6LV95tCIPA_lda9L7zw"
// },
// "desc": "教育公益",
// "bgUrl": "brandpage/esg3.png"
// }
// ]
// ],
// "qrInfoList": [
// {
// "qrUrl": "brandpage/qrhxf_sph.png",
// "title": "视频号",
// "desc": "扫码关注<span style='color:#D3A358;'>鹤小飞一家</span>视频号,看超多有爱的趣味故事"
// },
// {
// "qrUrl": "brandpage/qrhxf_wxxd.png",
// "title": "微信小店",
// "desc": "扫码进入<span style='color:#D3A358;'>鹤小飞一家</span>店铺,挑选精美限量周边"
// }
// ],
// "productTabList": [
// "全部",
// "母婴全阶",
// "星妈优选",
// "北纬47°",
// "功能营养",
// "儿童产品"
// ],
// "swiperIconList": [
// {
// "baseUrl": "brandpage/corn1.png",
// "activeUrl": "brandpage/corn2.png",
// "text": "北纬47°生态"
// },
// {
// "baseUrl": "brandpage/cattle1.png",
// "activeUrl": "brandpage/cattle2.png",
// "text": "13家自有牧场"
// },
// {
// "baseUrl": "brandpage/factory1.png",
// "activeUrl": "brandpage/factory2.png",
// "text": "工厂游预约"
// }
// ],
// "ipDesc": "鹤小飞一家是由鹤爸、鹤妈、鹤小飞(哥哥)、鹤小小(妹妹) 组成的一家。\n四口热爱生活、积极向上,是他们一家对生活的态度。"
// };
if (data) { if (data) {
this.swiperList = data.swiperList; this.swiperList = data.swiperList;
this.erqiPeizhi = data.erqiPeizhi; this.erqiPeizhi = data.erqiPeizhi;
...@@ -938,10 +407,96 @@ export default { ...@@ -938,10 +407,96 @@ export default {
this.currentVideoUrl = data.videoUrl; this.currentVideoUrl = data.videoUrl;
this.video1Channel = data.video1Channel; this.video1Channel = data.video1Channel;
this.video2Channel = data.video2Channel; this.video2Channel = data.video2Channel;
this.initExposure();
} }
}, },
initExposure() {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "品牌故事页",
componentName: "品牌故事页banner",
componentContent: this.swiperList[0]?.title || ''
});
this.productTabList.forEach((item, index) => {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "品牌故事页",
componentName: "飞鹤产品家族",
componentContent: "产品家族切换分类-" + item
});
})
if (this.productInfoList.length > 0 && this.productInfoList[0]?.length > 0) {
this.productInfoList[0]?.forEach((item, index) => {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "品牌故事页",
componentName: "飞鹤产品家族",
componentContent: "产品家族商品-" + item.shareTitle
});
})
}
this.ipExStr.forEach((item, index) => {
this.exposureTracker.addExposureElement({
id: 'ip' + (index + 1),
logParams: {
xcxComponentExposure: "true",
pageName: "品牌故事页",
componentName: "鹤小飞",
componentContent: item + '-' + this.erqiPeizhi['ipTitle' + (index + 1)]
}
})
})
this.esgInfoList.forEach((item, index) => {
this.exposureTracker.addExposureElement({
id: 'esg' + (index + 1),
logParams: {
xcxComponentExposure: "true",
pageName: "品牌故事页",
componentName: "飞鹤ESG",
componentContent: item.desc
}
})
})
this.exposureTracker.addExposureElements([
{
id: 'brandVideo1',
logParams: {
xcxComponentExposure: 'true',
pageName: '品牌故事页',
componentName: '品牌故事视频',
componentContent: this.video1Channel.title || ''
}
},
{
id: 'brandVideo2',
logParams: {
xcxComponentExposure: 'true',
pageName: '品牌故事页',
componentName: '品牌故事视频',
componentContent: this.video2Channel.title || ''
}
}
])
},
ipTapEvent(index, evt) {
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "品牌故事页",
componentName: "鹤小飞",
componentContent: this.ipExStr[index] + '-' + this.erqiPeizhi['ipTitle' + index]
});
},
intervalChange(e) { intervalChange(e) {
this.swiperIndex = e.target.current; this.swiperIndex = e.target.current;
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "品牌故事页",
componentName: "品牌故事页banner",
componentContent: this.swiperList[e.target.current]?.title || ''
});
}, },
jumpSwiper(_index, evt) {//点indicator切换图片 jumpSwiper(_index, evt) {//点indicator切换图片
if (evt) { if (evt) {
...@@ -953,6 +508,9 @@ export default { ...@@ -953,6 +508,9 @@ export default {
jumpLink(_link, videoUrl, evt) { jumpLink(_link, videoUrl, evt) {
if (evt) { if (evt) {
md.sensorLog(evt); md.sensorLog(evt);
if (evt.currentTarget.dataset.comlog) {
md.sensorComponentLogTake(evt.currentTarget.dataset.comlog);
}
} }
// console.log(_link) // console.log(_link)
// uni.navigateTo({ // uni.navigateTo({
...@@ -972,16 +530,48 @@ export default { ...@@ -972,16 +530,48 @@ export default {
jumpProduct(item, evt) { jumpProduct(item, evt) {
if (evt) { if (evt) {
md.sensorLog(evt); md.sensorLog(evt);
if (evt.currentTarget.dataset.comlog) {
md.sensorComponentLogTake(evt.currentTarget.dataset.comlog);
}
} }
const { productId, skuId, contentImg, contentImgLen, shareTitle, shareImg, title } = item; const { productId, skuId, contentImg, contentImgLen, shareTitle, shareImg, title } = item;
const tabName = this.productTabList[this.channelTabIndex]; const tabName = this.productTabList[this.channelTabIndex];
uni.navigateTo({
url: "/pages/product/product?productId=" + productId + "&skuId=" + skuId + "&contentImg=" + contentImg + "&contentImgLen=" + contentImgLen + "&shareTitle=" + shareTitle + "&shareImg=" + shareImg + "&tabName=" + tabName + "&title=" + title if(productId && skuId){
}) const url = `subPackages/shopMainProcess/product/index?productId=${productId}&skuId=${skuId}`;
const type = JumpType.MINI;
const extra = {
appId: 'wx4205ec55b793245e', //星妈优选小程序
extraData: {},
envVersion: 'release',
embedded: true,
};
jump({
type: type,
url: url,
extra:extra
})
}else{
uni.navigateTo({
url: "/pages/product/product?productId=" + productId + "&skuId=" + skuId + "&contentImg=" + contentImg + "&contentImgLen=" + contentImgLen + "&shareTitle=" + shareTitle + "&shareImg=" + shareImg + "&tabName=" + tabName + "&title=" + title
})
}
}, },
channelTabHandler(_index, evt) { channelTabHandler(_index, evt) {
if (evt) { if (evt) {
md.sensorLog(evt); md.sensorLog(evt);
if (evt.currentTarget.dataset.comlog) {
md.sensorComponentLogTake(evt.currentTarget.dataset.comlog);
this.productInfoList[_index]?.forEach((item, index) => {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "品牌故事页",
componentName: "飞鹤产品家族",
componentContent: "产品家族商品-" + item.shareTitle
});
})
}
} }
this.channelTabIndex = _index; this.channelTabIndex = _index;
...@@ -1075,6 +665,9 @@ export default { ...@@ -1075,6 +665,9 @@ export default {
openChannel(videoChannel, evt) { openChannel(videoChannel, evt) {
if (evt) { if (evt) {
md.sensorLog(evt); md.sensorLog(evt);
if (evt.currentTarget.dataset.comlog) {
md.sensorComponentLogTake(evt.currentTarget.dataset.comlog);
}
} }
const finderUserName = videoChannel.finderUserName; const finderUserName = videoChannel.finderUserName;
const feedId = videoChannel.feedId; const feedId = videoChannel.feedId;
...@@ -1147,6 +740,12 @@ export default { ...@@ -1147,6 +740,12 @@ export default {
} }
} }
md.sensorLog(evt); md.sensorLog(evt);
md.sensorComponentLogTake({
xcxComponentClick: 'true',
pageName: '品牌故事页',
componentName: '品牌故事视频',
componentContent: this.video1Channel.title || ''
});
console.log('视频1开始播放'); console.log('视频1开始播放');
this.handleVideoPlay('brandVideo1'); this.handleVideoPlay('brandVideo1');
}, },
...@@ -1164,7 +763,12 @@ export default { ...@@ -1164,7 +763,12 @@ export default {
} }
} }
md.sensorLog(evt); md.sensorLog(evt);
md.sensorComponentLogTake({
xcxComponentClick: 'true',
pageName: '品牌故事页',
componentName: '品牌故事视频',
componentContent: this.video2Channel.title || ''
});
console.log('视频2开始播放'); console.log('视频2开始播放');
this.handleVideoPlay('brandVideo2'); this.handleVideoPlay('brandVideo2');
}, },
......
...@@ -58,8 +58,8 @@ ...@@ -58,8 +58,8 @@
<swiper-item v-for="(item, index) in toolList.tools" :key="index" <swiper-item v-for="(item, index) in toolList.tools" :key="index"
:class="['swiperItem', { 'active': currentIndex === index }]"> :class="['swiperItem', { 'active': currentIndex === index }]">
<view class="tool"> <view class="tool">
<button v-if="homeStore && !homeStore.isLogin && index>0" open-type="getPhoneNumber" <button v-if="homeStore && !homeStore.isLogin && item.title!='星妈起名' && item.title!='体质测试'"
@getphonenumber="onGetPhoneNumber" class="sq_btn"></button> open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber" class="sq_btn"></button>
<image class="tool_bg" :src="$baseUrl + item.icon" @tap="handleToolClick(item)"> <image class="tool_bg" :src="$baseUrl + item.icon" @tap="handleToolClick(item)">
</image> </image>
<!-- <image class="tool_icon" :src="$baseUrl + item.icon"></image> <!-- <image class="tool_icon" :src="$baseUrl + item.icon"></image>
...@@ -80,7 +80,7 @@ ...@@ -80,7 +80,7 @@
<!--推荐工具--> <!--推荐工具-->
<!--专家团--> <!--专家团-->
<view class="et_box"> <view class="et_box" id="expertTeam">
<view class="et_maintitle">{{ expertTeam.maintitle }}</view> <view class="et_maintitle">{{ expertTeam.maintitle }}</view>
<view :data-log="{ <view :data-log="{
xcxClick: '首页-二屏页面点击', xcxClick: '首页-二屏页面点击',
...@@ -88,7 +88,8 @@ ...@@ -88,7 +88,8 @@
buttonName: '专家团副标题点击' buttonName: '专家团副标题点击'
}" class="et_subtitle"> }" class="et_subtitle">
<view class="txtlink" @tap="showPopup1(1, 1)">星妈会医生在线答疑群,为孩子成长保驾护航</view> <view class="txtlink" @tap="showPopup1(1, 1)">星妈会医生在线答疑群,为孩子成长保驾护航</view>
<image class="icon_more" @tap="showPopup1(1, 2)" :src="$baseUrl + 'homepage/et_more.png'"></image> <image id="et_joingroup" class="icon_more" @tap="showPopup1(1, 2)"
:src="$baseUrl + 'homepage/et_more.png'"></image>
</view> </view>
<view class="et_main_box"> <view class="et_main_box">
<view class="et_con_bg"> <view class="et_con_bg">
...@@ -126,7 +127,7 @@ ...@@ -126,7 +127,7 @@
<image class="et_con3" v-if="etTabSelIndex == 2" :src="$baseUrl + expertTeam.etConUrl3"> <image class="et_con3" v-if="etTabSelIndex == 2" :src="$baseUrl + expertTeam.etConUrl3">
</image> </image>
</view> </view>
<view class="et_more_txt" @tap="onETMore(2, etTabSelIndex)"> <view id="et_more" class="et_more_txt" @tap="onETMore(2, etTabSelIndex)">
<text class="txtlink">点击查看更多</text> <text class="txtlink">点击查看更多</text>
<image class="icon_arrow_yellow" :src="$baseUrl + 'homepage/icon_arrow_yellow.png'"></image> <image class="icon_arrow_yellow" :src="$baseUrl + 'homepage/icon_arrow_yellow.png'"></image>
</view> </view>
...@@ -175,23 +176,35 @@ ...@@ -175,23 +176,35 @@
</view> --> </view> -->
<view class="channelbox"> <view id="childrenInfoList" class="channelbox">
<text class="maintitle">{{ childrenInfoListMianTitle }}</text> <text class="maintitle">{{ childrenInfoListMianTitle }}</text>
<view class="subtitle_box"> <view class="subtitle_box">
<text class="subtitle">从专业到实用,一站式解决你的育儿难题</text> <text class="subtitle">从专业到实用,一站式解决你的育儿难题</text>
<image class="icon_more" :src="$baseUrl + 'homepage/home_more_btn_v2.png'" :data-log="{ <image id="childrenInfoListMore" class="icon_more" :src="$baseUrl + 'homepage/home_more_btn_v2.png'"
xcxClick: '首页-三屏页面点击', :data-log="{
pageName: '首页-三屏', xcxClick: '首页-三屏页面点击',
buttonName: `次位内容资源位-查看更多文字` pageName: '首页-三屏',
}" @tap="jumpLink(suggest.link, false, false, $event)"></image> buttonName: `次位内容资源位-查看更多文字`
}" :data-comlog="{
xcxComponentClick: 'true',
pageName: '首页',
componentName: '育儿智库',
componentContent: '育儿智库-more'
}" @tap="jumpLink(suggest.link, false, false, $event)"></image>
</view> </view>
<view class="channelscroll"> <view class="channelscroll">
<view class="box"> <view class="box">
<view class="infobox" :key="index" v-for="(infoItem, index) in childrenInfoList" :data-log="{ <view class="infobox" :key="index" :id="'childrenInfoList' + index"
xcxClick: '首页-三屏页面点击', v-for="(infoItem, index) in childrenInfoList" :data-log="{
pageName: '首页-三屏', xcxClick: '首页-三屏页面点击',
buttonName: `次位内容资源位-轮播-${index + 1}` pageName: '首页-三屏',
}" @tap="jumpLink(infoItem.link, false, false, $event)"> buttonName: `次位内容资源位-轮播-${index + 1}`
}" :data-comlog="{
xcxComponentClick: 'true',
pageName: '首页',
componentName: '育儿智库',
componentContent: infoItem.desc
}" @tap="jumpLink(infoItem.link, false, false, $event)">
<image class="infoimg" :src="$baseUrl + infoItem.bgUrl"></image> <image class="infoimg" :src="$baseUrl + infoItem.bgUrl"></image>
<view class="infotitlebox"> <view class="infotitlebox">
<view class="infotitlecon"> <view class="infotitlecon">
...@@ -261,10 +274,17 @@ ...@@ -261,10 +274,17 @@
<view id="fourthScreen" class="bottomlink"> <view id="fourthScreen" class="bottomlink">
<image class="bottombg" :src="$baseUrl + 'homepage/bottombg.png'"></image> <image class="bottombg" :src="$baseUrl + 'homepage/bottombg.png'"></image>
<view class="box"> <view class="box">
<image class="icon" v-for="(icon, index) in bottomLinkList" :key="index" :data-log="{ <image class="icon" :id="'bottomLink' + index" v-for="(icon, index) in bottomLinkList" :key="index"
xcxClick: '首页-四屏页面点击', :data-log="{
pageName: '首页-四屏', xcxClick: '首页-四屏页面点击',
buttonName: `${qrNameList[index]}` pageName: '首页-四屏',
buttonName: `${qrNameList[index]}`
}" :data-comlog="{
xcxComponentClick: 'true',
xcxComponentExposure: 'true',
pageName: '首页',
componentName: '跳转工具',
componentContent: `${qrNameList[index]}`
}" :src="$baseUrl + icon.bgUrl" :style="icon._style" @tap="showPopup(index, $event)"></image> }" :src="$baseUrl + icon.bgUrl" :style="icon._style" @tap="showPopup(index, $event)"></image>
</view> </view>
</view> </view>
...@@ -308,1477 +328,1629 @@ ...@@ -308,1477 +328,1629 @@
<script> <script>
import { import {
jump, jump,
JumpType JumpType
} from '../utils'; } from '../utils';
import { import {
useHomeStore useHomeStore
} from '../stores/home'; } from '../stores/home';
import { import {
fetchHomeJSON fetchHomeJSON
} from '../api/home'; } from '../api/home';
import { import {
useUserStore useUserStore
} from '../stores/user'; } from '../stores/user';
import RegisterLayer from "../components/RegisterLayer.vue"; import RegisterLayer from "../components/RegisterLayer.vue";
import md from '../md'; import md from '../md';
import ExposureTracker from '../utils/exposure'; import ExposureTracker from '../utils/exposure';
import { import {
getHealthField getHealthField
} from "@/api/common"; } from "@/api/common";
// const homeStore = useHomeStore(); // const homeStore = useHomeStore();
const userStore = useUserStore(); const userStore = useUserStore();
// 定义需要曝光检测的元素配置 // 定义需要曝光检测的元素配置
const EXPOSURE_CONFIGS = [{ const EXPOSURE_CONFIGS = [{
id: 'firstScreen', id: 'firstScreen',
logParams: { logParams: {
xcxPage: '首页-首屏页面浏览', xcxPage: '首页-首屏页面浏览',
pageName: '首页-首屏' pageName: '首页-首屏'
}
},
// 可以添加更多需要曝光检测的元素配置
{
id: 'secondScreen',
logParams: {
xcxPage: '首页-二屏页面浏览',
pageName: '首页-二屏'
}
},
{
id: 'thirdScreen',
logParams: {
xcxPage: '首页-三屏页面浏览',
pageName: '首页-三屏'
}
},
{
id: 'fourthScreen',
logParams: {
xcxPage: '首页-四屏页面浏览',
pageName: '首页-四屏'
}
}
];
export default {
beforeDestroy() {
if (this.exposureTracker) {
this.exposureTracker.resetAllExposure();
}
},
deactivated() {
if (this.exposureTracker) {
this.exposureTracker.resetAllExposure();
}
},
data() {
return {
popType: 'bottom',
statusBarHeight: 38,
showRegisterLayer: false,
swiperList: [],
indicatorDots: true,
autoplay: true,
interval: 4000,
duration: 500,
indicatoractiveColor: "#a6a0a1",
indicatorColor: "rgba(255, 255, 255, 1)",
toolList: {},
expertTeam: {},
vipCardList: [],
contentImgList: [],
channelTabList: [],
channelTabIndex: 0,
changelInfoList: [],
childrenInfoList: [],
bottomLinkList: [],
qrInfoObj: undefined,
popupIndex: 0,
qrInfoList: [{
title: '',
desc: '',
qrUrl: ''
}, {
title: '',
desc: '',
qrUrl: ''
}, {
title: '',
desc: '',
qrUrl: ''
}, {
title: '',
desc: '',
qrUrl: ''
}],
qrObj: {
title: '',
desc: '',
qrUrl: ''
},
showVideo: false,
currentVideoUrl: '',
isClickPhoneAuth: false,
voiceStory: {},
suggest: {},
videoHeight: '56vw',
qrNameList: ['公众号', '企业微信', '视频号', '小红书'],
windowHeight: 0,
isFirstScreenExposed: false,
scrollTimer: null,
exposureTracker: null,
currentIndex: 0,
etTabSelIndex: 0,
bannerCurrentIndex: 0,
childrenInfoListMianTitle: '',
channelTabListMianTitle: '',
popupImageUrl: '',
popupImageObj: {},
}
},
components: {
RegisterLayer
},
computed: {
homeStore() {
return useHomeStore();
}
},
props: {
scrollTop: {
type: Number,
default: 0
}
},
watch: {
homeStore: {
handler(newVal) {
this.showRegisterLayer = this.isClickPhoneAuth && newVal.isLogin && !newVal.babyExistence;
if (newVal.homeInfo !== null) {
this.initHomeInfo();
this.checkAndShowPopup();
}
},
deep: true,
immediate: true
},
scrollTop: {
handler(newVal) {
this.checkExposure(newVal);
} }
}
},
mounted() {
const menuButtonInfo = wx.getMenuButtonBoundingClientRect();
this.statusBarHeight = menuButtonInfo.top;
this.isClickPhoneAuth = false;
// 获取窗口高度
const systemInfo = uni.getSystemInfoSync();
this.windowHeight = systemInfo.windowHeight;
// 初始化曝光检测工具
this.exposureTracker = new ExposureTracker(this);
this.exposureTracker.addExposureElements(EXPOSURE_CONFIGS);
// 初始检查曝光
this.$nextTick(() => {
this.checkExposure(this.scrollTop);
});
},
unmounted() {
// 组件销毁时清理弹窗状态(可选,根据业务需求决定是否保留状态)
// 如果需要重置弹窗状态,可以在这里调用 this.resetPopupState()
},
methods: {
testSource() {
uni.navigateTo({
url: '/pages/syWebview/syWebview?p=xmh'
})
}, },
async initHomeInfo() { // 可以添加更多需要曝光检测的元素配置
const { {
data id: 'secondScreen',
} = await fetchHomeJSON(); logParams: {
console.warn("data", data) xcxPage: '首页-二屏页面浏览',
if (data) { pageName: '首页-二屏'
this.swiperList = data.swiperList;
this.vipConfigList = data.vipConfigList;
// this.vipCardList = data.vipCardList;
this.contentImgList = data.contentImgList;
this.channelTabList = data.channelTabList;
this.changelInfoList = data.changelInfoList;
this.childrenInfoList = data.childrenInfoList[0] || [];
this.bottomLinkList = data.bottomLinkList;
this.qrInfoList = data.qrInfoList || [];
this.toolList = data.toolList;
this.expertTeam = data.expertTeam;
this.vipCardList = data.vipCardList;
this.voiceStory = data.voiceStory;
this.suggest = data.suggest;
this.childrenInfoListMianTitle = data.childrenInfoListMianTitle;
this.channelTabListMianTitle = data.channelTabListMianTitle;
this.popupImageUrl = this.$baseUrl + data.popupImageObj?.imageUrl || '';
this.popupImageObj = data.popupImageObj || {};
if (this.homeStore.isLogin) {
this.vipCardList[0] = data.vipConfigList.find(item => item.grade === this.homeStore.homeInfo
?.grade);
this.vipCardList[0].level = this.homeStore.homeInfo?.gradeName;
} else {
this.vipCardList[0] = data.vipConfigList[0];
}
} }
}, },
changeIndicatorDots(e) { {
this.indicatorDots = !this.indicatorDots id: 'thirdScreen',
}, logParams: {
changeAutoplay(e) { xcxPage: '首页-三屏页面浏览',
this.autoplay = !this.autoplay pageName: '首页-三屏'
},
intervalChange(e) {
this.interval = e.target.value
},
durationChange(e) {
this.duration = e.target.value
},
jumpBannerHandler(item, index) {
console.log("item====", item)
md.sensorLogTake({
xcxClick: '首页-首屏页面点击',
pageName: '首页-首屏',
buttonName: `第${index + 1}张焦点图-入口`,
});
if (item.videoUrl) {
this.currentVideoUrl = this.$baseUrl + item.videoUrl;
this.showVideo = true;
return;
} }
if (item.link) {
// 有 link,执行跳转
jump(item.link);
} else {
// 没有 link,预览图片
uni.previewImage({
urls: [this.$baseUrl + item.url], // 预览当前图片
current: this.$baseUrl + item.url // 当前显示的图片
});
}
},
previewImage(url) {
uni.previewImage({
urls: [url], // 预览当前图片
current: url // 当前显示的图片
});
}, },
jumpLinkWithLogin(link, evt) { {
if (evt) { id: 'fourthScreen',
md.sensorLog(evt); logParams: {
xcxPage: '首页-四屏页面浏览',
pageName: '首页-四屏'
} }
if (this.homeStore.isLogin) { }
jump(link); ];
export default {
beforeDestroy() {
if (this.exposureTracker) {
this.exposureTracker.resetAllExposure();
} }
}, },
jumpLinkCard(item, evt) { deactivated() {
if (evt) { if (this.exposureTracker) {
md.sensorLog(evt); this.exposureTracker.resetAllExposure();
}
if (item.btnSubTitle.length > 0 && item.btnTitle.length > 0) {
return; //如果有按钮的话,废弃这个点击事件
}
if (item.link) {
jump(item.link);
} }
}, },
jumpLink(link, videoUrl, index, evt) { data() {
if (evt) { return {
md.sensorLog(evt); popType: 'bottom',
} statusBarHeight: 38,
if (videoUrl) { showRegisterLayer: false,
if (videoUrl.indexOf('http') === -1) { swiperList: [],
videoUrl = this.$baseUrl + videoUrl; indicatorDots: true,
} autoplay: true,
// 弹出视频 interval: 4000,
this.currentVideoUrl = videoUrl; duration: 500,
if (index === 1) { indicatoractiveColor: "#a6a0a1",
this.videoHeight = "100vw"; indicatorColor: "rgba(255, 255, 255, 1)",
} else { toolList: {},
this.videoHeight = "56vw"; expertTeam: {},
} vipCardList: [],
this.showVideo = true; contentImgList: [],
return; channelTabList: [],
// 视频弹窗出现后,video标签的autoplay会自动播放 channelTabIndex: 0,
} else if (link) { changelInfoList: [],
if (!link || link === '') { childrenInfoList: [],
return; bottomLinkList: [],
} qrInfoObj: undefined,
// 其他跳转逻辑 popupIndex: 0,
jump(link); qrInfoList: [{
title: '',
desc: '',
qrUrl: ''
}, {
title: '',
desc: '',
qrUrl: ''
}, {
title: '',
desc: '',
qrUrl: ''
}, {
title: '',
desc: '',
qrUrl: ''
}],
qrObj: {
title: '',
desc: '',
qrUrl: ''
},
showVideo: false,
currentVideoUrl: '',
isClickPhoneAuth: false,
voiceStory: {},
suggest: {},
videoHeight: '56vw',
qrNameList: ['公众号', '企业微信', '视频号', '小红书'],
windowHeight: 0,
isFirstScreenExposed: false,
scrollTimer: null,
exposureTracker: null,
currentIndex: 0,
etTabSelIndex: 0,
bannerCurrentIndex: 0,
childrenInfoListMianTitle: '',
channelTabListMianTitle: '',
popupImageUrl: '',
popupImageObj: {},
} }
}, },
channelTabHandler(_index, evt) { components: {
if (evt) { RegisterLayer
md.sensorLog(evt);
}
this.channelTabIndex = _index;
}, },
showPopup(_index, evt) { computed: {
if (evt) { homeStore() {
md.sensorLog(evt); return useHomeStore();
} }
md.sensorLogTake({ },
xcxPage: `${this.qrNameList[_index]}拉起半屏二维码入口页面浏览`, props: {
pageName: `${this.qrNameList[_index]}拉起半屏二维码入口`, scrollTop: {
}); type: Number,
default: 0
if (_index === 3) {
this.qrObj = null;
} else {
_index = Math.max(0, Math.min(_index, this.qrInfoList.length - 1));
this.qrObj = this.qrInfoList[_index];
} }
this.popupIndex = _index;
this.$refs.popup.open(this.popType);
}, },
showPopup1(_index, type) { watch: {
md.sensorLogTake({ homeStore: {
xcxClick: `首页-二屏页面点击`, handler(newVal) {
pageName: `首页-二屏`, this.showRegisterLayer = this.isClickPhoneAuth && newVal.isLogin && !newVal.babyExistence;
buttonName: type == 1 ? '专家团副标题点击' : '专家团进群咨询按钮点击' if (newVal.homeInfo !== null) {
}); this.initHomeInfo();
this.checkAndShowPopup();
if (_index === 3) { }
this.qrObj = null; },
} else { deep: true,
_index = Math.max(0, Math.min(_index, this.qrInfoList.length - 1)); immediate: true
this.qrObj = this.qrInfoList[_index]; },
scrollTop: {
handler(newVal) {
this.checkExposure(newVal);
}
} }
this.popupIndex = _index;
this.$refs.popup.open(this.popType);
}, },
closePop() { mounted() {
this.$refs.popup.close(); const menuButtonInfo = wx.getMenuButtonBoundingClientRect();
this.statusBarHeight = menuButtonInfo.top;
this.isClickPhoneAuth = false;
// 获取窗口高度
const systemInfo = uni.getSystemInfoSync();
this.windowHeight = systemInfo.windowHeight;
// 初始化曝光检测工具
this.exposureTracker = new ExposureTracker(this);
this.exposureTracker.addExposureElements(EXPOSURE_CONFIGS);
// 初始检查曝光
this.$nextTick(() => {
this.checkExposure(this.scrollTop);
});
}, },
goSearchHandler(e) { unmounted() {
md.sensorLog(e); // 组件销毁时清理弹窗状态(可选,根据业务需求决定是否保留状态)
uni.navigateTo({ // 如果需要重置弹窗状态,可以在这里调用 this.resetPopupState()
url: "/pages/search/search"
})
}, },
downloadHandler(imgurl) { methods: {
md.sensorLogTake({
xcxClick: `${this.qrNameList[this.popupIndex]}拉起半屏二维码入口页面点击`,
pageName: `${this.qrNameList[this.popupIndex]}拉起半屏二维码入口页面点击`,
buttonName: `下载二维码`
});
uni.downloadFile({ testSource() {
url: imgurl, uni.navigateTo({
success: (downloadRes) => { url: '/pages/syWebview/syWebview?p=xmh'
if (downloadRes.statusCode === 200) { })
uni.saveImageToPhotosAlbum({ },
filePath: downloadRes.tempFilePath, async initHomeInfo() {
success: (res) => { const {
uni.showToast({ data
title: '保存成功', } = await fetchHomeJSON();
icon: 'success' console.warn("data", data)
}); if (data) {
}, this.swiperList = data.swiperList;
fail: (err) => { this.vipConfigList = data.vipConfigList;
uni.showToast({ // this.vipCardList = data.vipCardList;
title: '保存失败', this.contentImgList = data.contentImgList;
icon: 'none' this.channelTabList = data.channelTabList;
}); this.changelInfoList = data.changelInfoList;
} this.childrenInfoList = data.childrenInfoList[0] || [];
}); this.bottomLinkList = data.bottomLinkList;
this.qrInfoList = data.qrInfoList || [];
this.toolList = data.toolList;
this.expertTeam = data.expertTeam;
this.vipCardList = data.vipCardList;
this.voiceStory = data.voiceStory;
this.suggest = data.suggest;
this.childrenInfoListMianTitle = data.childrenInfoListMianTitle;
this.channelTabListMianTitle = data.channelTabListMianTitle;
this.popupImageUrl = this.$baseUrl + data.popupImageObj?.imageUrl || '';
this.popupImageObj = data.popupImageObj || {};
if (this.homeStore.isLogin) {
this.vipCardList[0] = data.vipConfigList.find(item => item.grade === this.homeStore.homeInfo
?.grade);
this.vipCardList[0].level = this.homeStore.homeInfo?.gradeName;
} else {
this.vipCardList[0] = data.vipConfigList[0];
}
//拿到数据之后,初始化曝光一些节点
this.initExposure();
}
},
initExposure() {
const componentContent = this.toolList.tools?.[this.currentIndex]?.title || '';
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "首页",
componentName: "工具推荐",
componentContent: componentContent
});
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "首页",
componentName: "首页banner",
componentContent: this.swiperList[0]?.title || ''
});
const childrenInfoList = this.childrenInfoList;
childrenInfoList.forEach((item, index) => {
this.exposureTracker.addExposureElement({
id: 'childrenInfoList' + index,
logParams: {
xcxComponentExposure: 'true',
pageName: '首页',
componentName: '育儿智库',
componentContent: item.desc
}
});
});
this.qrNameList.forEach((item, index) => {
this.exposureTracker.addExposureElement({
id: 'bottomLink' + index,
logParams: {
xcxComponentExposure: 'true',
pageName: '首页',
componentName: '跳转工具',
componentContent: `${item}`
}
});
});
//动态添加专家团的首屏数据
this.exposureTracker.addExposureElements([{
id: 'expertTeam',
logParams: {
xcxComponentExposure: 'true',
pageName: '首页',
componentName: '专家团',
componentContent: '专家团tab切换-名医专家'
}
},
{
id: 'et_joingroup',
logParams: {
xcxComponentExposure: 'true',
pageName: '首页',
componentName: '专家团',
componentContent: '专家团-进群咨询'
}
}, {
id: 'et_more',
logParams: {
xcxComponentExposure: 'true',
pageName: '首页',
componentName: '专家团',
componentContent: '专家团-查看更多'
}
}, {
id: 'childrenInfoList',
logParams: {
xcxComponentExposure: 'true',
pageName: '首页',
componentName: '育儿智库',
componentContent: '育儿智库'
}
},
{
id: 'childrenInfoListMore',
logParams: {
xcxComponentExposure: 'true',
pageName: '首页',
componentName: '育儿智库',
componentContent: '育儿智库-more'
}
}
]);
},
changeIndicatorDots(e) {
this.indicatorDots = !this.indicatorDots
},
changeAutoplay(e) {
this.autoplay = !this.autoplay
},
intervalChange(e) {
this.interval = e.target.value
},
durationChange(e) {
this.duration = e.target.value
},
jumpBannerHandler(item, index) {
console.log("item====", item)
md.sensorLogTake({
xcxClick: '首页-首屏页面点击',
pageName: '首页-首屏',
buttonName: `第${index + 1}张焦点图-入口`,
});
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "首页",
componentName: "首页banner",
componentContent: item.title
});
if (item.videoUrl) {
this.currentVideoUrl = this.$baseUrl + item.videoUrl;
this.showVideo = true;
return;
}
if (item.link) {
// 有 link,执行跳转
jump(item.link);
} else {
// 没有 link,预览图片
uni.previewImage({
urls: [this.$baseUrl + item.url], // 预览当前图片
current: this.$baseUrl + item.url // 当前显示的图片
});
}
},
previewImage(url) {
uni.previewImage({
urls: [url], // 预览当前图片
current: url // 当前显示的图片
});
},
jumpLinkWithLogin(link, evt) {
if (evt) {
md.sensorLog(evt);
}
if (this.homeStore.isLogin) {
jump(link);
}
},
jumpLinkCard(item, evt) {
if (evt) {
md.sensorLog(evt);
}
if (item.btnSubTitle.length > 0 && item.btnTitle.length > 0) {
return; //如果有按钮的话,废弃这个点击事件
}
if (item.link) {
jump(item.link);
}
},
jumpLink(link, videoUrl, index, evt) {
if (evt) {
md.sensorLog(evt);
if (evt.currentTarget.dataset.comlog) {
md.sensorComponentLog(evt);
}
}
if (videoUrl) {
if (videoUrl.indexOf('http') === -1) {
videoUrl = this.$baseUrl + videoUrl;
}
// 弹出视频
this.currentVideoUrl = videoUrl;
if (index === 1) {
this.videoHeight = "100vw";
} else { } else {
this.videoHeight = "56vw";
}
this.showVideo = true;
return;
// 视频弹窗出现后,video标签的autoplay会自动播放
} else if (link) {
if (!link || link === '') {
return;
}
// 其他跳转逻辑
jump(link);
}
},
channelTabHandler(_index, evt) {
if (evt) {
md.sensorLog(evt);
}
this.channelTabIndex = _index;
},
showPopup(_index, evt) {
if (evt) {
md.sensorLog(evt);
if (evt.currentTarget.dataset.comlog) {
md.sensorComponentLog(evt);
}
}
md.sensorLogTake({
xcxPage: `${this.qrNameList[_index]}拉起半屏二维码入口页面浏览`,
pageName: `${this.qrNameList[_index]}拉起半屏二维码入口`,
});
if (_index === 3) {
this.qrObj = null;
} else {
_index = Math.max(0, Math.min(_index, this.qrInfoList.length - 1));
this.qrObj = this.qrInfoList[_index];
}
this.popupIndex = _index;
this.$refs.popup.open(this.popType);
},
showPopup1(_index, type) {
md.sensorLogTake({
xcxClick: `首页-二屏页面点击`,
pageName: `首页-二屏`,
buttonName: type == 1 ? '专家团副标题点击' : '专家团进群咨询按钮点击'
});
if (type == 2) {
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "首页",
componentName: "专家团",
componentContent: '专家团-进群咨询'
});
}
if (_index === 3) {
this.qrObj = null;
} else {
_index = Math.max(0, Math.min(_index, this.qrInfoList.length - 1));
this.qrObj = this.qrInfoList[_index];
}
this.popupIndex = _index;
this.$refs.popup.open(this.popType);
},
closePop() {
this.$refs.popup.close();
},
goSearchHandler(e) {
md.sensorLog(e);
uni.navigateTo({
url: "/pages/search/search"
})
},
downloadHandler(imgurl) {
md.sensorLogTake({
xcxClick: `${this.qrNameList[this.popupIndex]}拉起半屏二维码入口页面点击`,
pageName: `${this.qrNameList[this.popupIndex]}拉起半屏二维码入口页面点击`,
buttonName: `下载二维码`
});
uni.downloadFile({
url: imgurl,
success: (downloadRes) => {
if (downloadRes.statusCode === 200) {
uni.saveImageToPhotosAlbum({
filePath: downloadRes.tempFilePath,
success: (res) => {
uni.showToast({
title: '保存成功',
icon: 'success'
});
},
fail: (err) => {
uni.showToast({
title: '保存失败',
icon: 'none'
});
}
});
} else {
uni.showToast({
title: '下载失败',
icon: 'none'
});
}
},
fail: (err) => {
uni.showToast({ uni.showToast({
title: '下载失败', title: '下载失败',
icon: 'none' icon: 'none'
}); });
} }
}, });
fail: (err) => { },
closeVideo() {
this.showVideo = false;
this.currentVideoUrl = '';
},
onGetPhoneNumber(e) {
if (e.detail.errMsg !== 'getPhoneNumber:ok') {
uni.showToast({ uni.showToast({
title: '下载失败', title: '请授权使用手机号',
icon: 'none' icon: 'none',
}); });
return;
} }
}); console.log('detail', e.detail);
}, this.isClickPhoneAuth = true;
closeVideo() { userStore.phoneCallback(e.detail);
this.showVideo = false; },
this.currentVideoUrl = ''; goCustomerHandler(e) {
}, md.sensorLog(e);
onGetPhoneNumber(e) { const {
if (e.detail.errMsg !== 'getPhoneNumber:ok') { memberId,
uni.showToast({ mobile,
title: '请授权使用手机号', openId,
icon: 'none', unionId
} = this.homeStore.homeInfo;
const customerUrl =
`https://intelcc-user.icsoc.net/?channelKey=45839e0505554f8c8aea3c7b6259b049&init=1&crmld=${memberId}&mobile=${mobile}&openId=${openId}&unionId=${unionId}`;
jump({
type: JumpType.H5,
url: customerUrl
}); });
return; },
} checkExposure(scrollTop) {
console.log('detail', e.detail); if (this.exposureTracker) {
this.isClickPhoneAuth = true; this.exposureTracker.checkExposure(scrollTop);
userStore.phoneCallback(e.detail); }
}, },
goCustomerHandler(e) { resetExposure() {
md.sensorLog(e); if (this.exposureTracker) {
const { this.exposureTracker.resetAllExposure();
memberId, }
mobile, },
openId,
unionId
} = this.homeStore.homeInfo;
const customerUrl =
`https://intelcc-user.icsoc.net/?channelKey=45839e0505554f8c8aea3c7b6259b049&init=1&crmld=${memberId}&mobile=${mobile}&openId=${openId}&unionId=${unionId}`;
jump({
type: JumpType.H5,
url: customerUrl
});
},
checkExposure(scrollTop) {
if (this.exposureTracker) {
this.exposureTracker.checkExposure(scrollTop);
}
},
resetExposure() {
if (this.exposureTracker) {
this.exposureTracker.resetAllExposure();
}
},
onSwiperChange(e) { onSwiperChange(e) {
this.currentIndex = e.detail.current; this.currentIndex = e.detail.current;
}, const componentContent = this.toolList.tools?.[this.currentIndex]?.title || '';
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "首页",
componentName: "工具推荐",
componentContent: componentContent
});
},
onBannerSwiperChange(e) { onBannerSwiperChange(e) {
this.bannerCurrentIndex = e.detail.current; this.bannerCurrentIndex = e.detail.current;
}, md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "首页",
componentName: "首页banner",
componentContent: this.swiperList[e.detail.current].title
});
},
async handleToolClick(item) { async handleToolClick(item) {
md.sensorLogTake({ md.sensorLogTake({
xcxClick: "首页-二屏页面点击", xcxClick: "首页-二屏页面点击",
pageName: "首页-二屏", pageName: "首页-二屏",
buttonName: item.title + "工具点击", buttonName: item.title + "工具点击",
}); });
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "首页",
componentName: "工具推荐",
componentContent: item.title
});
if (item.title === "医生问诊") { if (item.title === "医生问诊") {
// if (!cfgStatus.value.isRegister) return; // if (!cfgStatus.value.isRegister) return;
const res = await getHealthField(); const res = await getHealthField();
if (!res.success) { if (!res.success) {
uni.showToast({ uni.showToast({
title: "获取健康字段失败", title: "获取健康字段失败",
icon: "none", icon: "none",
});
return;
}
const {
sign,
timestamp,
appId,
partnerUserId,
env
} = res.data;
jump({
type: JumpType.MINI,
url: "/pages/partner/redirect",
extra: {
appId: "wx81ecfb5aa3fb512f",
envVersion: env,
extraData: {
sign, // 参考 4.请求参数
timestamp, // 参考 4.请求参数
appId, // 参考 4.请求参数
partnerUserId, // 参考 4.请求参数
targetApp: "/h5/partner/shining-like-a-start/landing-free-consult?sysType=CRF",
},
},
});
} else {
jump({
type: item.link.type,
url: item.link.url
}); });
return;
} }
},
const { onSelEtTap(index) {
sign, let str = index === 0 ? '名医专家' : (index === 1 ? '科研专家' : '权威机构')
timestamp, md.sensorLogTake({
appId, xcxClick: "首页-二屏页面点击",
partnerUserId, pageName: "首页-二屏",
env buttonName: str + "tab按钮点击",
} = res.data; });
md.sensorComponentLogTake({
xcxComponentClick: "true",
xcxComponentExposure: "true",
pageName: "首页",
componentName: "专家团",
componentContent: '专家团tab切换-' + str
});
jump({ this.etTabSelIndex = index;
type: JumpType.MINI, },
url: "/pages/partner/redirect", onETMore(index, type) {
extra: { let str = '';
appId: "wx81ecfb5aa3fb512f", if (type === 0) {
envVersion: env, str = '名医专家';
extraData: { } else if (type === 1) {
sign, // 参考 4.请求参数 str = '科研专家';
timestamp, // 参考 4.请求参数 } else {
appId, // 参考 4.请求参数 str = '权威机构';
partnerUserId, // 参考 4.请求参数 }
targetApp: "/h5/partner/shining-like-a-start/landing-free-consult?sysType=CRF", if (index === 1) {
}, str += '内容'
}, } else {
str += '点击查看更多';
}
md.sensorLogTake({
xcxClick: "首页-二屏页面点击",
pageName: "首页-二屏",
buttonName: str + "-点击",
});
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "首页",
componentName: "专家团",
componentContent: str
}); });
} else {
jump({ jump({
type: item.link.type, type: 1,
url: item.link.url url: '/pages/expertTeamPage/expertTeamPage?tab=' + (this.etTabSelIndex + 1)
}); });
} },
}, closeImagePopup() {
this.$refs.imagePopup.close();
onSelEtTap(index) { },
let str = index === 0 ? '名医专家' : (index === 1 ? '科研专家' : '权威机构')
md.sensorLogTake({
xcxClick: "首页-二屏页面点击",
pageName: "首页-二屏",
buttonName: str + "tab按钮点击",
});
this.etTabSelIndex = index;
},
onETMore(index, type) {
let str = '';
if (type === 0) {
str = '名医专家';
} else if (type === 1) {
str = '科研专家';
} else {
str = '权威机构';
}
if (index === 1) {
str += '内容'
} else {
str += '点击查看更多';
}
md.sensorLogTake({
xcxClick: "首页-二屏页面点击",
pageName: "首页-二屏",
buttonName: str + "-点击",
});
jump({
type: 1,
url: '/pages/expertTeamPage/expertTeamPage?tab=' + (this.etTabSelIndex + 1)
});
},
closeImagePopup() {
this.$refs.imagePopup.close();
},
imagePopupJump() { imagePopupJump() {
jump({ md.sensorPopLogTake({
type: this.popupImageObj.jumpType, xcxPopClick: "true",
url: this.popupImageObj.jumpUrl, toolName: "首页",
extra: this.popupImageObj.jumpExtra popName: this.popupImageObj.title || "北纬47°鲜活溯源之旅",
}); buttonName: this.popupImageObj.btnName || "立即寻宝"
}, });
showImagePopup() { jump({
this.$refs.imagePopup.open('center'); type: this.popupImageObj.jumpType,
}, url: this.popupImageObj.jumpUrl,
closePop1() { extra: this.popupImageObj.jumpExtra
this.$refs.imagePopup.close(); });
}, },
showImagePopup() {
md.sensorPopLogTake({
xcxPopExposure: "true",
toolName: "首页",
popName: this.popupImageObj.title || "北纬47°鲜活溯源之旅"
});
this.$refs.imagePopup.open('center');
},
closePop1() {
this.$refs.imagePopup.close();
},
// 重置弹窗状态(可在需要时调用) // 重置弹窗状态(可在需要时调用)
resetPopupState() { resetPopupState() {
this.homeStore.resetPopupState(); // 重置 store 中的弹窗状态 this.homeStore.resetPopupState(); // 重置 store 中的弹窗状态
}, },
// 检查并显示弹窗(使用 store 全局状态管理) // 检查并显示弹窗(使用 store 全局状态管理)
checkAndShowPopup() { checkAndShowPopup() {
// 使用 store 中的 hasShownPopup 来记录是否已经显示过弹窗 // 使用 store 中的 hasShownPopup 来记录是否已经显示过弹窗
if (!this.homeStore.hasShownPopup && this.homeStore.homeInfo?.showPop1) { if (!this.homeStore.hasShownPopup && this.homeStore.homeInfo?.showPop1) {
this.homeStore.markPopupAsShown(); // 标记已显示过弹窗(全局状态) this.homeStore.markPopupAsShown(); // 标记已显示过弹窗(全局状态)
this.$nextTick(() => { this.$nextTick(() => {
setTimeout(() => { setTimeout(() => {
this.showImagePopup(); this.showImagePopup();
}, 500); }, 500);
}); });
}
} }
} }
} }
}
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
@import '@/common.less'; @import '@/common.less';
.home-container {
width: 100vw;
overflow-x: hidden;
background-color: white;
.content { .home-container {
width: 100vw;
overflow-x: hidden;
background-color: white; background-color: white;
padding-bottom: 200rpx;
.banner { .content {
height: 1116rpx; background-color: white;
padding-bottom: 200rpx;
.banneritem { .banner {
width: 750rpx;
height: 1116rpx; height: 1116rpx;
.b-img { .banneritem {
width: 750rpx;
height: 1116rpx;
.b-img {
width: 100%;
height: 100%;
}
}
}
.swiper-mask {
position: absolute;
left: 0;
width: 750rpx;
height: 192rpx;
z-index: 1;
top: 1065rpx;
.swiper-mask-img {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
} }
}
.swiper-mask { // 自定义banner指示器样式
position: absolute; .custom-banner-indicator {
left: 0; position: absolute;
width: 750rpx; top: 1075rpx;
height: 192rpx; left: 50%;
z-index: 1; transform: translateX(-50%);
top: 1065rpx; display: flex;
align-items: center;
.swiper-mask-img { justify-content: center;
width: 100%; gap: 16rpx;
height: 100%;
}
}
// 自定义banner指示器样式 .banner-dot {
.custom-banner-indicator { width: 16rpx;
position: absolute;
top: 1075rpx;
left: 50%;
transform: translateX(-50%);
display: flex;
align-items: center;
justify-content: center;
gap: 16rpx;
.banner-dot {
width: 16rpx;
height: 16rpx;
border-radius: 50%;
background-color: #feebc4;
transition: all 0.3s ease;
flex-shrink: 0;
&.active {
width: 40rpx;
height: 16rpx; height: 16rpx;
border-radius: 8rpx; border-radius: 50%;
background-color: #D3A358; background-color: #feebc4;
transition: all 0.3s ease;
flex-shrink: 0;
&.active {
width: 40rpx;
height: 16rpx;
border-radius: 8rpx;
background-color: #D3A358;
}
} }
} }
}
.barbox { .barbox {
position: absolute; position: absolute;
top: 97rpx; top: 97rpx;
left: 32rpx; left: 32rpx;
display: flex; display: flex;
align-items: center; align-items: center;
.btnlogo {
width: 184rpx;
height: 66rpx;
}
.btnsearch {
width: 150rpx;
height: 68rpx;
margin-left: 20rpx;
}
.customer-btn-wrap { .btnlogo {
position: relative; width: 184rpx;
display: inline-block; height: 66rpx;
} }
.btncustomer { .btnsearch {
width: 70rpx; width: 150rpx;
height: 68rpx; height: 68rpx;
margin-left: 110rpx; margin-left: 20rpx;
} }
.phone-auth-btn-cover { .customer-btn-wrap {
position: absolute; position: relative;
left: 0; display: inline-block;
top: 0; }
right: 0;
bottom: 0;
width: 100%;
height: 100%;
background: transparent;
opacity: 0;
border: none;
padding: 0;
margin: 0;
z-index: 10;
pointer-events: auto;
}
}
// .txtbox { .btncustomer {
// width: 100%; width: 70rpx;
// height: 76rpx; height: 68rpx;
// background-color: @color-white-soft; margin-left: 110rpx;
// text-align: center; }
// .txtlink {
// color: @color-gold-cover;
// font-size: 24rpx;
// text-underline-offset: 10rpx;
// text-decoration: underline;
// }
// .icon_arrow_yellow {
// width: 12rpx;
// height: 20rpx;
// margin-left: 10rpx;
// }
// }
.tools_box {
width: 750rpx;
height: 840rpx;
margin-top: 40rpx;
overflow-x: scroll;
padding-left: 38rpx;
.tools_maintitle {
// font-size: 42rpx;
// color: #000;
color: @color-black-deep;
font-size: 38rpx;
font-weight: bold;
}
.tools_subtitle { .phone-auth-btn-cover {
margin-top: 10rpx; position: absolute;
font-size: 24rpx; left: 0;
color: #999; top: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
background: transparent;
opacity: 0;
border: none;
padding: 0;
margin: 0;
z-index: 10;
pointer-events: auto;
}
} }
.tool_swiper { // .txtbox {
margin-top: 35rpx; // width: 100%;
width: 720rpx; // height: 76rpx;
height: 700rpx; // background-color: @color-white-soft;
overflow: visible; // text-align: center;
/* 关键:允许内容溢出 */
// .txtlink {
.swiperItem { // color: @color-gold-cover;
width: 400rpx; // font-size: 24rpx;
height: 700rpx; // text-underline-offset: 10rpx;
top: 40rpx; // text-decoration: underline;
// }
// .icon_arrow_yellow {
// width: 12rpx;
// height: 20rpx;
// margin-left: 10rpx;
// }
// }
.tools_box {
width: 750rpx;
height: 840rpx;
margin-top: 40rpx;
overflow-x: scroll;
padding-left: 38rpx;
.tools_maintitle {
// font-size: 42rpx;
// color: #000;
color: @color-black-deep;
font-size: 38rpx;
font-weight: bold;
} }
/* 当前激活项放大 */ .tools_subtitle {
.swiperItem.active { margin-top: 10rpx;
top: 0rpx !important; font-size: 24rpx;
z-index: 10; color: #999;
transition: top 0.4s ease;
} }
.tool { .tool_swiper {
position: absolute; margin-top: 35rpx;
width: 400rpx; width: 720rpx;
height: 700rpx; height: 700rpx;
overflow: visible;
/* 关键:允许内容溢出 */
.sq_btn { .swiperItem {
position: absolute;
left: 0rpx;
top: 0rpx;
width: 400rpx; width: 400rpx;
height: 650rpx; height: 700rpx;
// background-color: red; top: 40rpx;
opacity: 0;
z-index: 2;
} }
.tool_bg { /* 当前激活项放大 */
position: absolute; .swiperItem.active {
left: 0rpx; top: 0rpx !important;
top: 0rpx; z-index: 10;
width: 400rpx; transition: top 0.4s ease;
height: 650rpx;
border-radius: 40rpx;
z-index: 1;
} }
.tool_icon { .tool {
position: absolute; position: absolute;
left: 0rpx;
top: 0rpx;
width: 400rpx; width: 400rpx;
height: 470rpx; height: 700rpx;
border-radius: 40rpx;
} .sq_btn {
position: absolute;
left: 0rpx;
top: 0rpx;
width: 400rpx;
height: 650rpx;
// background-color: red;
opacity: 0;
z-index: 2;
}
.tool_jt { .tool_bg {
position: absolute; position: absolute;
left: 300rpx; left: 0rpx;
top: 510rpx; top: 0rpx;
width: 74rpx; width: 400rpx;
height: 44rpx; height: 650rpx;
} border-radius: 40rpx;
z-index: 1;
}
.tool_title { .tool_icon {
position: absolute; position: absolute;
left: 30rpx; left: 0rpx;
top: 510rpx; top: 0rpx;
color: #000; width: 400rpx;
font-size: 36rpx; height: 470rpx;
width: 300rpx; border-radius: 40rpx;
}
} .tool_jt {
position: absolute;
left: 300rpx;
top: 510rpx;
width: 74rpx;
height: 44rpx;
}
.tool_context { .tool_title {
position: absolute; position: absolute;
left: 30rpx; left: 30rpx;
top: 575rpx; top: 510rpx;
font-size: 24rpx; color: #000;
color: #999; font-size: 36rpx;
width: 300rpx; width: 300rpx;
}
.tool_context {
position: absolute;
left: 30rpx;
top: 575rpx;
font-size: 24rpx;
color: #999;
width: 300rpx;
}
} }
} }
}
/* 自定义指示点样式 */ /* 自定义指示点样式 */
.custom-indicator { .custom-indicator {
width: 200rpx; width: 200rpx;
height: 10rpx; height: 10rpx;
margin-top: -15rpx; margin-top: -15rpx;
margin-left: -20rpx; margin-left: -20rpx;
display: flex; display: flex;
justify-content: center; justify-content: center;
gap: 10rpx; gap: 10rpx;
} }
.indicator-dot { .indicator-dot {
width: 10rpx; width: 10rpx;
height: 10rpx; height: 10rpx;
border-radius: 10rpx; border-radius: 10rpx;
background-color: #feefcc; background-color: #feefcc;
transition: all 0.3s; transition: all 0.3s;
} }
.indicator-dot.active { .indicator-dot.active {
width: 70rpx; width: 70rpx;
border-radius: 10rpx; border-radius: 10rpx;
background-color: #d3a358; background-color: #d3a358;
}
} }
}
.et_box { .et_box {
width: 750rpx; width: 750rpx;
// height: 840rpx; // height: 840rpx;
margin-top: 30rpx; margin-top: 30rpx;
padding-left: 38rpx; padding-left: 38rpx;
.et_maintitle { .et_maintitle {
// font-size: 42rpx; // font-size: 42rpx;
// color: #000; // color: #000;
color: @color-black-deep; color: @color-black-deep;
font-size: 38rpx; font-size: 38rpx;
font-weight: bold; font-weight: bold;
} }
.et_subtitle { .et_subtitle {
width: 700rpx; width: 700rpx;
margin-top: 10rpx; margin-top: 10rpx;
display: flex; display: flex;
.txtlink { .txtlink {
width: 500rpx; width: 500rpx;
color: @color-gold-cover; color: @color-gold-cover;
font-size: 24rpx; font-size: 24rpx;
text-underline-offset: 5rpx; text-underline-offset: 5rpx;
text-decoration: underline; text-decoration: underline;
} }
.icon_more { .icon_more {
width: 140rpx; width: 140rpx;
height: 36rpx; height: 36rpx;
margin-left: 45rpx; margin-left: 45rpx;
margin-top: 2rpx; margin-top: 2rpx;
}
} }
}
.et_main_box { .et_main_box {
padding-top: 30rpx; padding-top: 30rpx;
margin-top: 35rpx; margin-top: 35rpx;
width: 670rpx; width: 670rpx;
height: 602rpx; height: 602rpx;
background-color: #fde8bb; background-color: #fde8bb;
border-radius: 38rpx;
.et_con_bg {
margin-left: 3rpx;
width: 651rpx;
height: 562rpx;
background-color: #ffffff;
border-radius: 38rpx; border-radius: 38rpx;
padding-left: 15rpx;
padding-top: 25rpx;
.et_tab_box { .et_con_bg {
height: 70rpx; margin-left: 3rpx;
display: flex; width: 651rpx;
gap: 15rpx; height: 562rpx;
background-color: #ffffff;
border-radius: 38rpx;
padding-left: 15rpx;
padding-top: 25rpx;
.tab_box { .et_tab_box {
width: 204rpx;
height: 70rpx; height: 70rpx;
display: flex;
gap: 15rpx;
.et_tab { .tab_box {
width: 204rpx; width: 204rpx;
height: 70rpx; height: 70rpx;
.et_tab {
width: 204rpx;
height: 70rpx;
}
} }
} }
}
.et_con_box {
width: 631rpx;
height: 365rpx;
margin-top: 40rpx;
.et_con1 { .et_con_box {
width: 631rpx; width: 631rpx;
height: 365rpx; height: 365rpx;
} margin-top: 40rpx;
.et_con2 { .et_con1 {
width: 631rpx; width: 631rpx;
height: 365rpx; height: 365rpx;
} }
.et_con3 { .et_con2 {
width: 598rpx; width: 631rpx;
height: 303rpx; height: 365rpx;
margin-top: 20rpx; }
margin-left: 16rpx;
}
}
.et_more_txt { .et_con3 {
width: 100%; width: 598rpx;
font-size: 24rpx; height: 303rpx;
color: @color-gold-cover; margin-top: 20rpx;
text-align: center; margin-left: 16rpx;
margin-top: 30rpx; }
}
.icon_arrow_yellow { .et_more_txt {
width: 12rpx; width: 100%;
height: 20rpx; font-size: 24rpx;
margin-left: 5rpx; color: @color-gold-cover;
text-align: center;
margin-top: 30rpx;
.icon_arrow_yellow {
width: 12rpx;
height: 20rpx;
margin-left: 5rpx;
}
} }
} }
} }
} }
}
.cardScroller {
width: 750rpx;
overflow-x: scroll;
}
.cardbox { .cardScroller {
// width: 750rpx;
position: relative; overflow-x: scroll;
display: inline-flex; }
flex-wrap: nowrap;
margin-top: 32rpx;
.cardboxitem { .cardbox {
width: 380rpx; //
height: 232rpx;
position: relative; position: relative;
margin-left: 32rpx; display: inline-flex;
flex-wrap: nowrap;
margin-top: 32rpx;
.bg { .cardboxitem {
width: 380rpx; width: 380rpx;
height: 232rpx; height: 232rpx;
position: absolute;
z-index: 0;
}
.level {
position: absolute;
left: 24rpx;
top: 30rpx;
font-size: 32rpx;
font-weight: bold;
color: @color-gold-cover;
pointer-events: none;
}
.subTitle {
position: absolute;
left: 24rpx;
top: 80rpx;
font-size: 24rpx;
color: @color-black-deep;
pointer-events: none;
}
.showCornerTxt {
position: absolute;
right: 0;
top: 0;
color: white;
font-size: 24rpx;
padding: 10rpx;
border-radius: 0 10rpx 0 10rpx;
background-color: @color-gold-main;
}
.cardbtn {
position: relative; position: relative;
left: 6rpx; margin-left: 32rpx;
top: 130rpx;
.phone-auth-btn-cover { .bg {
width: 380rpx;
height: 232rpx;
position: absolute; position: absolute;
width: 368rpx;
height: 88rpx;
z-index: 0; z-index: 0;
left: 0;
top: 0;
opacity: 0;
pointer-events: auto;
} }
.cardbtnbg { .level {
position: absolute; position: absolute;
width: 368rpx; left: 24rpx;
height: 88rpx; top: 30rpx;
z-index: 0; font-size: 32rpx;
left: 0; font-weight: bold;
top: 0; color: @color-gold-cover;
pointer-events: none;
} }
.btnTitle { .subTitle {
position: absolute; position: absolute;
// z-index: 1; left: 24rpx;
width: 180rpx; top: 80rpx;
text-align: center;
font-size: 24rpx; font-size: 24rpx;
color: white; color: @color-black-deep;
// border: 1px solid red; pointer-events: none;
top: 23rpx;
left: 20rpx;
} }
.btnSubTitle { .showCornerTxt {
position: absolute; position: absolute;
top: 23rpx; right: 0;
// z-index: 1; top: 0;
color: white;
font-size: 24rpx; font-size: 24rpx;
font-weight: bold; padding: 10rpx;
color: @color-gold-light; border-radius: 0 10rpx 0 10rpx;
left: 210rpx; background-color: @color-gold-main;
} }
}
}
}
.contentbox { .cardbtn {
width: 750rpx; position: relative;
height: 1429rpx; left: 6rpx;
position: relative; top: 130rpx;
margin-top: 32px;
.phone-auth-btn-cover {
.contentbg { position: absolute;
width: 100%; width: 368rpx;
height: 100%; height: 88rpx;
position: absolute; z-index: 0;
} left: 0;
top: 0;
opacity: 0;
pointer-events: auto;
.contentitem { }
position: absolute;
}
} .cardbtnbg {
position: absolute;
width: 368rpx;
height: 88rpx;
z-index: 0;
left: 0;
top: 0;
}
.channelbox { .btnTitle {
margin-top: 32rpx; position: absolute;
margin-left: 32rpx; // z-index: 1;
width: 180rpx;
text-align: center;
font-size: 24rpx;
color: white;
// border: 1px solid red;
top: 23rpx;
left: 20rpx;
}
.maintitle { .btnSubTitle {
color: @color-black-deep; position: absolute;
font-size: 38rpx; top: 23rpx;
font-weight: bold; // z-index: 1;
display: block; font-size: 24rpx;
margin-left: 5rpx; font-weight: bold;
color: @color-gold-light;
left: 210rpx;
}
}
}
} }
.subtitle_box { .contentbox {
display: flex; width: 750rpx;
margin-top: 10rpx; height: 1429rpx;
margin-left: 5rpx; position: relative;
width: 700rpx; margin-top: 32px;
.subtitle { .contentbg {
width: 500rpx; width: 100%;
color: @color-black-deep; height: 100%;
font-size: 24rpx; position: absolute;
} }
.icon_more { .contentitem {
width: 127rpx; position: absolute;
height: 34rpx;
margin-left: 45rpx;
margin-top: 2rpx;
} }
}
}
.listbox { .channelbox {
display: flex; margin-top: 32rpx;
margin-top: 20rpx; margin-left: 32rpx;
width: 686rpx;
align-content: center;
justify-content: space-between;
.tabitem { .maintitle {
color: @color-black-deep; color: @color-black-deep;
background-color: #e9edf1; font-size: 38rpx;
padding: 15rpx 20rpx; font-weight: bold;
font-size: 22rpx; display: block;
// margin-right: 15rpx; margin-left: 5rpx;
border-radius: 30rpx;
} }
.tabActive { .subtitle_box {
color: white; display: flex;
background-color: @color-gold-main; margin-top: 10rpx;
margin-left: 5rpx;
width: 700rpx;
.subtitle {
width: 500rpx;
color: @color-black-deep;
font-size: 24rpx;
}
.icon_more {
width: 127rpx;
height: 34rpx;
margin-left: 45rpx;
margin-top: 2rpx;
}
} }
}
.channelscroll {
width: 718rpx;
overflow-y: scroll;
margin-top: 32rpx;
height: 620rpx;
.box {
.listbox {
display: flex; display: flex;
flex-direction: column; margin-top: 20rpx;
width: 686rpx;
align-content: center;
justify-content: space-between;
.tabitem {
color: @color-black-deep;
background-color: #e9edf1;
padding: 15rpx 20rpx;
font-size: 22rpx;
// margin-right: 15rpx;
border-radius: 30rpx;
}
.infobox { .tabActive {
width: 670rpx; color: white;
height: 180rpx; background-color: @color-gold-main;
}
}
.channelscroll {
width: 718rpx;
overflow-y: scroll;
margin-top: 32rpx;
height: 620rpx;
.box {
display: flex; display: flex;
align-items: center; flex-direction: column;
background-color: #fff;
border-radius: 16rpx;
border: 2rpx solid #feeecb;
margin-bottom: 20rpx;
.infoimg {
border-radius: 12rpx 0rpx 0rpx 12rpx;
-webkit-flex-shrink: 0;
flex-shrink: 0;
height: 180rpx;
/* margin-top: -1rpx ; */
width: 180rpx;
}
.infotitlebox { .infobox {
flex: 1; width: 670rpx;
margin-left: 20rpx; height: 180rpx;
display: flex; display: flex;
flex-direction: column; align-items: center;
justify-content: center; background-color: #fff;
border-radius: 16rpx;
border: 2rpx solid #feeecb;
margin-bottom: 20rpx;
.infoimg {
border-radius: 12rpx 0rpx 0rpx 12rpx;
-webkit-flex-shrink: 0;
flex-shrink: 0;
height: 180rpx;
/* margin-top: -1rpx ; */
width: 180rpx;
}
.infotitlecon { .infotitlebox {
flex: 1;
margin-left: 20rpx;
display: flex; display: flex;
flex-direction: row; flex-direction: column;
justify-content: center;
.infotitlecon {
display: flex;
flex-direction: row;
.infotitle {
color: @color-black-deep;
width: 400rpx;
font-size: 24rpx;
font-weight: bold;
margin-bottom: 8rpx;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
overflow: hidden;
line-height: 1.3;
}
.infotitletag {
width: 46rpx;
height: 22rpx;
color: #fff;
}
}
.infotitle {
color: @color-black-deep;
width: 400rpx; .infodesc {
font-size: 24rpx; color: #999999;
font-weight: bold; font-size: 22rpx;
margin-bottom: 8rpx; width: 450rpx;
line-height: 1.3;
display: -webkit-box; display: -webkit-box;
-webkit-line-clamp: 1; -webkit-line-clamp: 3;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
overflow: hidden; overflow: hidden;
line-height: 1.3;
}
.infotitletag {
width: 46rpx;
height: 22rpx;
color: #fff;
} }
} }
.infodesc {
color: #999999;
font-size: 22rpx;
width: 450rpx;
line-height: 1.3;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}
} }
} }
}
} }
.channelscroll2 {
width: 718rpx;
margin-top: 32rpx;
margin-left: -16rpx;
.box2 { .channelscroll2 {
width: 718rpx; width: 718rpx;
display: flex; margin-top: 32rpx;
flex-wrap: wrap; margin-left: -16rpx;
justify-content: space-between;
.infobox2 { .box2 {
width: 330rpx; width: 718rpx;
height: 430rpx;
display: flex; display: flex;
flex-direction: column; flex-wrap: wrap;
align-items: center; justify-content: space-between;
background-color: #fff;
border-radius: 16rpx;
border: 4rpx solid #feeecb;
margin-bottom: 20rpx;
position: relative;
.infoimg2 { .infobox2 {
width: 330rpx; width: 330rpx;
height: 306rpx; height: 430rpx;
border-radius: 12rpx 12rpx 0rpx 0rpx;
flex-shrink: 0;
}
.infotitle2box {
margin-top: 10rpx;
flex: 1;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; align-items: center;
width: 100%; background-color: #fff;
padding: 0 10rpx; border-radius: 16rpx;
border: 4rpx solid #feeecb;
.infotitle2 { margin-bottom: 20rpx;
color: @color-black-deep; position: relative;
width: 90%;
font-size: 24rpx; .infoimg2 {
font-weight: bold; width: 330rpx;
margin-bottom: 8rpx; height: 306rpx;
display: -webkit-box; border-radius: 12rpx 12rpx 0rpx 0rpx;
-webkit-line-clamp: 2; flex-shrink: 0;
-webkit-box-orient: vertical; }
overflow: hidden;
line-height: 1.3; .infotitle2box {
text-align: left; margin-top: 10rpx;
margin-left: 5%; flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
width: 100%;
padding: 0 10rpx;
.infotitle2 {
color: @color-black-deep;
width: 90%;
font-size: 24rpx;
font-weight: bold;
margin-bottom: 8rpx;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
line-height: 1.3;
text-align: left;
margin-left: 5%;
}
} }
} }
} }
} }
}
.desc { .desc {
color: @color-black-deep; color: @color-black-deep;
font-size: 24rpx; font-size: 24rpx;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
margin-top: 32rpx; margin-top: 32rpx;
.desc1 { .desc1 {
color: @color-gold-cover; color: @color-gold-cover;
margin-left: 5rpx; margin-left: 5rpx;
}
}
.desc2 {
padding-bottom: 32rpx;
} }
} }
.desc2 { .bottomlink {
padding-bottom: 32rpx; width: 750rpx;
height: 247rpx;
.bottombg {
width: 750rpx;
height: 247rpx;
position: absolute;
}
.box {
position: relative;
top: 100rpx;
width: 74%;
left: 13%;
display: flex;
align-items: flex-end;
justify-content: space-between;
.icon {}
}
} }
} }
.bottomlink { .popup-content {
width: 750rpx; width: 750rpx;
height: 247rpx; height: 812rpx;
border-top-left-radius: 48rpx;
border-top-right-radius: 48rpx;
position: relative;
.btnclose {
width: 70rpx;
height: 70rpx;
position: absolute;
top: 36rpx;
right: 32rpx;
}
.bottombg { .xingmahui {
width: 750rpx; width: 750rpx;
height: 247rpx; height: 100%;
position: absolute; position: absolute;
bottom: 0;
} }
.box { .title {
position: relative; position: absolute;
top: 100rpx; top: 47rpx;
width: 74%; left: 32rpx;
left: 13%; font-size: 36rpx;
display: flex; color: @color-black-deep;
align-items: flex-end; font-weight: bold;
justify-content: space-between;
.icon {} }
.desc {
position: absolute;
top: 108rpx;
left: 32rpx;
font-size: 28rpx;
color: @color-black-medium;
font-weight: bold;
} }
}
} .qrcode {
width: 340rpx;
height: 340rpx;
position: absolute;
top: 220rpx;
left: 205rpx;
}
.popup-content { .btndownload {
width: 750rpx; width: 286rpx;
height: 812rpx; height: 89rpx;
border-top-left-radius: 48rpx; position: absolute;
border-top-right-radius: 48rpx; top: 630rpx;
position: relative; left: 232rpx;
}
.btnclose {
width: 70rpx;
height: 70rpx;
position: absolute;
top: 36rpx;
right: 32rpx;
} }
.xingmahui { .video-popup {
width: 750rpx; position: fixed;
height: 100%; left: 0;
position: absolute; top: 0;
right: 0;
bottom: 0; bottom: 0;
background: rgba(0, 0, 0, 0.7);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
z-index: 9999;
} }
.title { .close-btn-bottom {
position: absolute; margin: 32rpx auto 0 auto;
top: 47rpx; width: 64rpx;
left: 32rpx; height: 64rpx;
font-size: 36rpx; border-radius: 50%;
color: @color-black-deep; background: rgba(0, 0, 0, 0.5);
font-weight: bold; color: #fff;
font-size: 44rpx;
line-height: 64rpx;
text-align: center;
z-index: 10001;
display: flex;
align-items: center;
justify-content: center;
} }
.desc { .phone-auth-mask {
position: absolute; position: fixed;
top: 108rpx; left: 0;
left: 32rpx; top: 0;
font-size: 28rpx; right: 0;
color: @color-black-medium; bottom: 0;
font-weight: bold; background: rgba(0, 0, 0, 0.5);
z-index: 1000;
} }
.qrcode { .phone-auth-popup {
width: 340rpx; position: fixed;
height: 340rpx; left: 50%;
position: absolute; top: 50%;
top: 220rpx; transform: translate(-50%, -50%);
left: 205rpx; background: #fff;
border-radius: 16rpx;
padding: 40rpx 32rpx;
z-index: 1001;
display: flex;
flex-direction: column;
align-items: center;
} }
.btndownload { .phone-auth-btn {
width: 286rpx; background: #ffd700;
height: 89rpx; color: #333;
position: absolute; font-size: 32rpx;
top: 630rpx; border-radius: 8rpx;
left: 232rpx; padding: 20rpx 60rpx;
margin-bottom: 20rpx;
} }
}
.video-popup { .close-btn {
position: fixed; font-size: 40rpx;
left: 0; color: #999;
top: 0; margin-top: 10rpx;
right: 0; }
bottom: 0;
background: rgba(0, 0, 0, 0.7);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
z-index: 9999;
}
.close-btn-bottom {
margin: 32rpx auto 0 auto;
width: 64rpx;
height: 64rpx;
border-radius: 50%;
background: rgba(0, 0, 0, 0.5);
color: #fff;
font-size: 44rpx;
line-height: 64rpx;
text-align: center;
z-index: 10001;
display: flex;
align-items: center;
justify-content: center;
}
.phone-auth-mask {
position: fixed;
left: 0;
top: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 1000;
}
.phone-auth-popup {
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
background: #fff;
border-radius: 16rpx;
padding: 40rpx 32rpx;
z-index: 1001;
display: flex;
flex-direction: column;
align-items: center;
}
.phone-auth-btn {
background: #ffd700;
color: #333;
font-size: 32rpx;
border-radius: 8rpx;
padding: 20rpx 60rpx;
margin-bottom: 20rpx;
}
.close-btn {
font-size: 40rpx;
color: #999;
margin-top: 10rpx;
}
.image-popup-content { .image-popup-content {
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
border-radius: 16rpx;
position: relative;
.popup-image {
width: 600rpx;
height: 600rpx;
border-radius: 16rpx; border-radius: 16rpx;
object-fit: cover; position: relative;
}
.popup-close-btn { .popup-image {
width: 70rpx; width: 600rpx;
height: 70rpx; height: 600rpx;
position: absolute; border-radius: 16rpx;
bottom: -120rpx; object-fit: cover;
left: 50%; }
transform: translateX(-50%);
z-index: 10; .popup-close-btn {
width: 70rpx;
height: 70rpx;
position: absolute;
bottom: -120rpx;
left: 50%;
transform: translateX(-50%);
z-index: 10;
}
} }
} }
}
</style> </style>
\ No newline at end of file
...@@ -55,8 +55,49 @@ ...@@ -55,8 +55,49 @@
:src="$baseUrl + `integral/${tupianBanben}/${item?.currentLvTip}`" :src="$baseUrl + `integral/${tupianBanben}/${item?.currentLvTip}`"
mode="aspectFit" mode="aspectFit"
/> />
<view class="jifen-progressbar"
v-if="getHuangjinMaxVal()[index] != -1 && !(memberInfo.grade == 0 && !memberInfo.orderUpgrade && points == 1)" <text class="current-xingyaodengji-tips"
v-if="getHuangjinMaxVal()[index] == -1 && !(memberInfo.grade == 0 && !memberInfo.orderUpgrade && points >= 1)"
:style="{ color: getColor('jifen')[index]?.currentPoints }"
> {{ itemIndex == 4 ? '您已经升至最高等级' : '您已超越该等级' }}</text>
<button
v-if="!islogin"
type="primary"
class="phone-button"
open-type="getPhoneNumber"
@getphonenumber="getRealtimePhoneNumber"
/>
</view>
<view class="saoma-tips"
@click="integralHandler" v-if="memberInfo.grade == 0 && !memberInfo.orderUpgrade && points >= 1">
<text class="saoma-tips-text"
:style="{ color: getColor('saomaTips')[index]?.textColor }"
>扫罐内码或下单有机会升级至<text class="saoma-tips-text-lv"
:style="{ color: getColor('saomaTips')[index]?.jifenColor }"
>{{ index == 0 ? gradeList[index + 1]?.gradeName : gradeList[index]?.gradeName }}</text>
</text>
<text class="saoma-tips-text-tips"
:style="{ color: getColor('saomaTips')[index]?.jifenColor }"
>累计积分
<text class="saoma-tips-text-tips-num"
:style="{ color: getColor('saomaTips')[index]?.jifenColor }"
>{{ points }}</text>
<text class="saoma-tips-text-tips-maxnum"
:style="{ color: getColor('saomaTips')[index]?.textColor }"
>/{{ getHuangjinMaxVal()[index] }}</text>
</text>
</view>
<view class="jifen-progressbar"
v-if="getHuangjinMaxVal()[index] != -1 && !(memberInfo.grade == 0 && !memberInfo.orderUpgrade && points >= 1)"
@click="integralHandler"
> >
<!-- 积分标题和数值 --> <!-- 积分标题和数值 -->
<view class="jifen-header"> <view class="jifen-header">
...@@ -94,43 +135,6 @@ ...@@ -94,43 +135,6 @@
</view> </view>
</view> </view>
<text class="current-xingyaodengji-tips"
v-if="getHuangjinMaxVal()[index] == -1 && !(memberInfo.grade == 0 && !memberInfo.orderUpgrade && points == 1)"
:style="{ color: getColor('jifen')[index]?.currentPoints }"
> {{ itemIndex == 4 ? '您已经升至最高等级' : '您已超越该等级' }}</text>
<view class="saoma-tips" v-if="memberInfo.grade == 0 && !memberInfo.orderUpgrade && points == 1">
<text class="saoma-tips-text"
:style="{ color: getColor('saomaTips')[index]?.textColor }"
>扫罐内码或下单有机会升级至<text class="saoma-tips-text-lv"
:style="{ color: getColor('saomaTips')[index]?.jifenColor }"
>{{ gradeList[index]?.gradeName }}</text>
</text>
<text class="saoma-tips-text-tips"
:style="{ color: getColor('saomaTips')[index]?.jifenColor }"
>积分
<text class="saoma-tips-text-tips-num"
:style="{ color: getColor('saomaTips')[index]?.jifenColor }"
>{{ points }}</text>
<text class="saoma-tips-text-tips-maxnum"
:style="{ color: getColor('saomaTips')[index]?.textColor }"
>/{{ getHuangjinMaxVal()[index] }}</text>
</text>
</view>
<button
v-if="!islogin"
type="primary"
class="phone-button"
open-type="getPhoneNumber"
@getphonenumber="getRealtimePhoneNumber"
/>
</view>
<text <text
class="chakanshengjigonglueTxt" class="chakanshengjigonglueTxt"
:style="{ color: getColor('chakangonglue')[index] }" :style="{ color: getColor('chakangonglue')[index] }"
...@@ -1514,6 +1518,7 @@ import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue'; ...@@ -1514,6 +1518,7 @@ import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue';
} }
} }
//isshowShouqi 为true 时,展示收起按详情,为false 时,展示查看详情 //isshowShouqi 为true 时,展示收起按详情,为false 时,展示查看详情
const handleZhankaiClick = () => { const handleZhankaiClick = () => {
...@@ -1764,15 +1769,27 @@ import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue'; ...@@ -1764,15 +1769,27 @@ import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue';
} }
hideLoading(); hideLoading();
initExposure();
}); });
const initExposure = () => {
imgInfos.value.forEach((item, index) => {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "会员权益-" + item.name
});
});
}
const initNetData = () => { const initNetData = () => {
console.log('initNetData'); console.log('initNetData');
memberInfo.value = userStore.memberInfo; memberInfo.value = userStore.memberInfo;
// memberInfo.value = {"grade": null, "gradeList": null, "gradeName": null, "maxGrade": false, "memberId": "not_login", "memberName": null, "mobile": null, "nextGradeScoreRuleMin": null, "orderUpgrade": null, "points": null, "recentAnnualPointsTotal": null, "willExpiredPoints": null} ; // memberInfo.value = {"grade": null, "gradeList": null, "gradeName": null, "maxGrade": false, "memberId": "not_login", "memberName": null, "mobile": null, "nextGradeScoreRuleMin": null, "orderUpgrade": null, "points": null, "recentAnnualPointsTotal": null, "willExpiredPoints": null} ;
// memberInfo.value = { // memberInfo.value = {
// "grade": "4", // "grade": "0",
// "gradeList": [ // "gradeList": [
// { // {
// "grade": "0", // "grade": "0",
...@@ -1810,10 +1827,10 @@ import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue'; ...@@ -1810,10 +1827,10 @@ import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue';
// "memberId": "CRM000000000948094264", // "memberId": "CRM000000000948094264",
// "memberName": "文慧17637145052", // "memberName": "文慧17637145052",
// "mobile": "17637145052", // "mobile": "17637145052",
// "nextGradeScoreRuleMin": 10000, // "nextGradeScoreRuleMin": 1,
// "orderUpgrade": true, // "orderUpgrade": false,
// "points": 999, // "points": 999,
// "recentAnnualPointsTotal": 5500, // "recentAnnualPointsTotal": 0,
// "willExpiredPoints": 100000 // "willExpiredPoints": 100000
// }; // };
...@@ -2030,8 +2047,7 @@ import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue'; ...@@ -2030,8 +2047,7 @@ import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue';
const type = item.type; const type = item.type;
const extra = item.extra; const extra = item.extra;
extra.embedded = true; //半屏拉起小程序
console.log('url11111=',url); console.log('url11111=',url);
...@@ -2142,7 +2158,12 @@ import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue'; ...@@ -2142,7 +2158,12 @@ import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue';
pageName: "积分服务页-首屏", pageName: "积分服务页-首屏",
buttonName: `${item.name}`, buttonName: `${item.name}`,
}); });
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "积分服务页",
componentName: "会员权益",
componentContent: "会员权益-" + item.name
});
console.log('selectIdx.value=', selectIdx.value); console.log('selectIdx.value=', selectIdx.value);
// const url = vipQuanyiUrl.value.url; // const url = vipQuanyiUrl.value.url;
...@@ -2483,8 +2504,55 @@ import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue'; ...@@ -2483,8 +2504,55 @@ import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue';
position: absolute; position: absolute;
} }
// 积分进度条样式
.jifen-progressbar {
.current-xingyaodengji-tips{
position: absolute;
top:209rpx;
left: 40rpx;
font-size: 18rpx;
}
.phone-button{
width: 692rpx;
height:256rpx;
top: 0rpx;
opacity: 0;
background: #6f6d67;
}
}
.saoma-tips{
position: absolute;
top:209rpx;
left: 40rpx;
font-size: 18rpx;
display: flex;
flex-direction: column;
.saoma-tips-text{
font-size: 18rpx;
.saoma-tips-text-lv{
font-size: 18rpx;
}
}
.saoma-tips-text-tips{
font-size: 18rpx;
.saoma-tips-text-tips-num{
font-size: 18rpx;
}
.saoma-tips-text-tips-maxnum{
font-size: 18rpx;
}
}
}
// 积分进度条样式
.jifen-progressbar {
position: absolute; position: absolute;
top: 207rpx; top: 207rpx;
width: 320rpx; width: 320rpx;
...@@ -2561,52 +2629,6 @@ import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue'; ...@@ -2561,52 +2629,6 @@ import ShengriliTipPanel from '../components/quanyi/shengriliTipPanel.vue';
} }
} }
.current-xingyaodengji-tips{
position: absolute;
top:209rpx;
left: 40rpx;
font-size: 18rpx;
}
.saoma-tips{
position: absolute;
top:209rpx;
left: 40rpx;
font-size: 18rpx;
display: flex;
flex-direction: column;
.saoma-tips-text{
font-size: 18rpx;
.saoma-tips-text-lv{
font-size: 18rpx;
}
}
.saoma-tips-text-tips{
font-size: 18rpx;
.saoma-tips-text-tips-num{
font-size: 18rpx;
}
.saoma-tips-text-tips-maxnum{
font-size: 18rpx;
}
}
}
.phone-button{
width: 692rpx;
height:256rpx;
top: 0rpx;
opacity: 0;
background: #6f6d67;
}
}
.chakanshengjigonglueTxt { .chakanshengjigonglueTxt {
font-size: 24rpx; font-size: 24rpx;
position: absolute; position: absolute;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<WheelSelector :options="wheelOptions" :selectedIndex="wheelSelectedIndex" <WheelSelector :options="wheelOptions" :selectedIndex="wheelSelectedIndex"
:bgImg="$baseUrl + 'my/track/track.png'" :iconNormal="$baseUrl + 'my/track/icon_stage_nor.png'" :bgImg="$baseUrl + 'my/track/track.png'" :iconNormal="$baseUrl + 'my/track/icon_stage_nor.png'"
:iconSelected="$baseUrl + 'my/track/icon_stage_sel.png'" :iconSelected="$baseUrl + 'my/track/icon_stage_sel.png'"
@update:selectedIndex="(val) => (wheelSelectedIndex = val)" /> @update:selectedIndex="(val) => (wheelSelectedIndex = val)" @change="handleWheelChange" />
</view> </view>
<view class="bg-container" :data-log="{ <view class="bg-container" :data-log="{
xcxClick: '我的页面点击', xcxClick: '我的页面点击',
...@@ -53,8 +53,7 @@ ...@@ -53,8 +53,7 @@
<view class="integral-account"> <view class="integral-account">
<text class="integral-account-text"> 账号: </text> <text class="integral-account-text"> 账号: </text>
<text class="integral-account-value"> <text class="integral-account-value">
{{ userStore.memberInfo?.mobile || '' }}</text {{ userStore.memberInfo?.mobile || '' }}</text>
>
</view> </view>
<BabySwitcher v-if="showBabySwitcher" :show="showBabySwitcher" :babyList="babyInfo.allBabyBaseInfo || []" <BabySwitcher v-if="showBabySwitcher" :show="showBabySwitcher" :babyList="babyInfo.allBabyBaseInfo || []"
...@@ -62,7 +61,7 @@ ...@@ -62,7 +61,7 @@
@add="onAddBaby" /> @add="onAddBaby" />
</view> </view>
<view class="integralContainer"> <view class="integralContainer" @click="handleIntegralClick">
<image <image
class="integralIcon" class="integralIcon"
src="https://course.feihe.com/momclub-picture/my/integralBg.png" src="https://course.feihe.com/momclub-picture/my/integralBg.png"
...@@ -101,33 +100,24 @@ ...@@ -101,33 +100,24 @@
<view class="tool-list"> <view class="tool-list">
<view class="tool-item" v-for="item in toolList" :key="item.title" @click="handleToolClick(item)"> <view class="tool-item" v-for="item in toolList" :key="item.title" @click="handleToolClick(item)">
<image class="tool-icon" :src="$baseUrl + item.bgUrl" mode="aspectFit" /> <image class="tool-icon" :src="$baseUrl + item.bgUrl" mode="aspectFit" />
<button v-if="(item.title == '医生问诊' || item.title == '产检提醒' || item.title == '喂养记录' || item.title == '生长测评') && !cfgStatus.isRegister" class="tool-btn-register" type="primary" <button
open-type="getPhoneNumber" @getphonenumber="getRealtimePhoneNumber" /> v-if="(item.title == '医生问诊' || item.title == '产检提醒' || item.title == '喂养记录' || item.title == '生长测评') && !cfgStatus.isRegister"
class="tool-btn-register" type="primary" open-type="getPhoneNumber"
@getphonenumber="getRealtimePhoneNumber" />
</view> </view>
</view> </view>
</view> </view>
<view class="vip-active-area" v-if="pageCfgStore?.contentCfg?.activeInfo?.length > 0"> <view class="vip-active-area" v-if="pageCfgStore?.contentCfg?.activeInfo?.length > 0">
<text class="vip-title">精彩活动</text> <text class="vip-title">精彩活动</text>
<swiper <swiper class="vip-active-swiper" :indicator-dots="pageCfgStore?.contentCfg?.activeInfo?.length > 1"
class="vip-active-swiper" :autoplay="true" :circular="true" indicator-color="#dfddd9" indicator-active-color="#b27c1e"
:indicator-dots="pageCfgStore?.contentCfg?.activeInfo?.length > 1" :indicator-top="32">
:autoplay="true" <swiper-item v-for="(item, index) in pageCfgStore?.contentCfg?.activeInfo" :key="index">
:circular="true" <image class="vip-active-img" :src="item?.img" mode="aspectFit" @click="handleVipActiveClick(index, item)" />
indicator-color="#dfddd9" </swiper-item>
indicator-active-color="#b27c1e" </swiper>
:indicator-top="32" </view>
>
<swiper-item v-for="(item, index) in pageCfgStore?.contentCfg?.activeInfo" :key="index">
<image
class="vip-active-img"
:src="item?.img"
mode="aspectFit"
@click="handleVipActiveClick(index, item)"
/>
</swiper-item>
</swiper>
</view>
<!-- 协议 --> <!-- 协议 -->
<view class="protocol-container"> <view class="protocol-container">
...@@ -198,8 +188,14 @@ const handleHot = (e) => { ...@@ -198,8 +188,14 @@ const handleHot = (e) => {
md.sensorLog(e); md.sensorLog(e);
console.log("handleHot", type); console.log("handleHot", type);
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "我的页面",
componentName: "查看协议",
componentContent: type === "member" ? "会员规则" : "隐私协议"
})
if (type === "member") { if (type === "member") {
navigateTo("/pages/webview/webview?type=MEMBER_URL"); navigateTo("/pages/webview/webview?type=MEMBER_URL");
} else if (type === "privacy") { } else if (type === "privacy") {
navigateTo("/pages/webview/webview?type=PRIVACY_URL"); navigateTo("/pages/webview/webview?type=PRIVACY_URL");
...@@ -228,7 +224,12 @@ const handleToolClick = async (item) => { ...@@ -228,7 +224,12 @@ const handleToolClick = async (item) => {
pageName: "我的页面", pageName: "我的页面",
buttonName: item.title, buttonName: item.title,
}); });
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "我的页面",
componentName: "工具",
componentContent: item.title
})
// 跳转产检提醒页面判断 // 跳转产检提醒页面判断
// let listData = userStore.babyInfo ? userStore.babyInfo.allBabyBaseInfo : [] // let listData = userStore.babyInfo ? userStore.babyInfo.allBabyBaseInfo : []
...@@ -266,12 +267,12 @@ const handleToolClick = async (item) => { ...@@ -266,12 +267,12 @@ const handleToolClick = async (item) => {
}); });
} }
// 三个工具校验是否授权 // 三个工具校验是否授权
else if (item.title === "生长测评" || item.title === "喂养记录" || item.title === "产检提醒") { else if (item.title === "生长测评" || item.title === "喂养记录" || item.title === "产检提醒") {
if (!cfgStatus.value.isRegister) return; if (!cfgStatus.value.isRegister) return;
jump({ type: item.link.type, url: item.link.url}); jump({ type: item.link.type, url: item.link.url });
} }
else { else {
jump({ type: item.link.type, url: item.link.url}); jump({ type: item.link.type, url: item.link.url });
// const extra = item.link.extra; // const extra = item.link.extra;
// if(extra && extra.babyId){ // if(extra && extra.babyId){
// jump({ type: item.link.type, url: item.link.url+'?babyId='+extra.babyId}); // jump({ type: item.link.type, url: item.link.url+'?babyId='+extra.babyId});
...@@ -290,6 +291,8 @@ const handleToolClick = async (item) => { ...@@ -290,6 +291,8 @@ const handleToolClick = async (item) => {
// 编辑个人资料 // 编辑个人资料
const handleEditProfile = (e) => { const handleEditProfile = (e) => {
if ( if (
!cfgStatus.value.isRegister || !cfgStatus.value.isRegister ||
!userStore.userInfo || !userStore.userInfo ||
...@@ -299,6 +302,12 @@ const handleEditProfile = (e) => { ...@@ -299,6 +302,12 @@ const handleEditProfile = (e) => {
} }
md.sensorLog(e); md.sensorLog(e);
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "我的页面",
componentName: "资料编辑",
componentContent: "资料编辑"
})
const type = userStore.babyInfo?.allBabyBaseInfo?.length == 0 ? "add" : "edit"; const type = userStore.babyInfo?.allBabyBaseInfo?.length == 0 ? "add" : "edit";
babyId.value = userStore.babyInfo?.allBabyBaseInfo.find( babyId.value = userStore.babyInfo?.allBabyBaseInfo.find(
...@@ -316,6 +325,69 @@ const onRegisterConfirm = (data) => { ...@@ -316,6 +325,69 @@ const onRegisterConfirm = (data) => {
showRegisterLayer.value = false; showRegisterLayer.value = false;
}; };
const handleWheelChange = (val) => {
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "我的页面",
componentName: "月龄定位器",
componentContent: babyInfo.value.babyStage == 2
? "月龄滑动切换-" + val
: "孕周滑动切换-" + val
});
}
const initExposure = () => {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "我的页面",
componentName: "资料编辑",
componentContent: "资料编辑"
});
toolList.value.forEach((item, index) => {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "我的页面",
componentName: "工具",
componentContent: item.title
});
});
if (pageCfgStore?.contentCfg?.activeInfo?.length > 0) {
pageCfgStore.contentCfg.activeInfo.forEach((item, index) => {
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "我的页面",
componentName: "精彩活动",
componentContent: "精彩活动-" + item.title
});
});
}
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "我的页面",
componentName: "查看协议",
componentContent: "会员规则"
});
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "我的页面",
componentName: "查看协议",
componentContent: "隐私协议"
});
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "我的页面",
componentName: "月龄定位器",
componentContent: babyInfo.value.babyStage == 2 ? "月龄滑动切换" : "孕周滑动切换"
});
}
// 获取用户信息 // 获取用户信息
const initData = async () => { const initData = async () => {
if ( if (
...@@ -344,6 +416,22 @@ const initData = async () => { ...@@ -344,6 +416,22 @@ const initData = async () => {
} }
}; };
const handleIntegralClick = () => {
md.sensorLogTake({
xcxClick: "我的页面-首屏页面点击",
pageName: "我的页面-首屏",
buttonName: "积分明细",
});
const urlStr = 'https://mom.feihe.com/member/mine/newPointDetail?crmId={crmid}&appCode=XMH';
const url = urlStr.replace("{crmid}", userStore.babyInfo?.memberId);
console.log('积分明细链接:==',url)
jump({
type: 3,
url: url
})
}
const getRealtimePhoneNumber = async (e) => { const getRealtimePhoneNumber = async (e) => {
console.log("获取手机号码", e); console.log("获取手机号码", e);
...@@ -365,6 +453,25 @@ const handleChangeBaby = (e) => { ...@@ -365,6 +453,25 @@ const handleChangeBaby = (e) => {
} }
md.sensorLog(e); md.sensorLog(e);
md.sensorComponentLogTake({
xcxComponentClick: "true",
xcxComponentExposure: "true",
pageName: "我的页面",
componentName: "资料编辑",
componentContent: "展开"
})
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "我的页面",
componentName: "资料编辑",
componentContent: "新增"
})
md.sensorComponentLogTake({
xcxComponentExposure: "true",
pageName: "我的页面",
componentName: "资料编辑",
componentContent: "状态切换"
})
showBabySwitcher.value = true; showBabySwitcher.value = true;
}; };
...@@ -378,6 +485,12 @@ async function onSelectBaby(baby) { ...@@ -378,6 +485,12 @@ async function onSelectBaby(baby) {
hideLoading(); hideLoading();
console.log("onSelectBaby", baby); console.log("onSelectBaby", baby);
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "我的页面",
componentName: "资料编辑",
componentContent: "状态切换"
})
} }
function onAddBaby() { function onAddBaby() {
...@@ -386,6 +499,12 @@ function onAddBaby() { ...@@ -386,6 +499,12 @@ function onAddBaby() {
pageName: "我的页面", pageName: "我的页面",
buttonName: "新增入口", buttonName: "新增入口",
}); });
md.sensorComponentLogTake({
xcxComponentClick: "true",
pageName: "我的页面",
componentName: "资料编辑",
componentContent: "新增"
})
// 跳转到新增宝宝页面 // 跳转到新增宝宝页面
showBabySwitcher.value = false; showBabySwitcher.value = false;
...@@ -414,6 +533,10 @@ onMounted(async () => { ...@@ -414,6 +533,10 @@ onMounted(async () => {
console.log("pageCfgStore.contentCfg====", pageCfgStore.contentCfg); console.log("pageCfgStore.contentCfg====", pageCfgStore.contentCfg);
initData(); initData();
initExposure();
hideLoading(); hideLoading();
...@@ -466,37 +589,41 @@ watch([() => userStore.userInfo, () => userStore.babyInfo], () => { ...@@ -466,37 +589,41 @@ watch([() => userStore.userInfo, () => userStore.babyInfo], () => {
//会员活动点击事件 //会员活动点击事件
const handleVipActiveClick = (index, item) => { const handleVipActiveClick = (index, item) => {
let buttonName = ''; let buttonName = '';
switch(index){ switch (index) {
case 0: case 0:
buttonName = '第一张焦点图'; buttonName = '第一张焦点图';
break; break;
case 1: case 1:
buttonName = '第二张焦点图'; buttonName = '第二张焦点图';
break; break;
} }
md.sensorLogTake({ md.sensorLogTake({
xcxClick: "我的页面点击", xcxClick: "我的页面点击",
pageName: "我的页面", pageName: "我的页面",
buttonName: buttonName, buttonName: buttonName,
}); });
md.sensorComponentLogTake({
const url = item?.url; xcxComponentClick: "true",
const type = item?.type; pageName: "我的页面",
const extra = item?.extra; componentName: "精彩活动",
componentContent: "精彩活动-" + item.title
jump({ })
type: type, const url = item?.url;
url: url, const type = item?.type;
extra:extra const extra = item?.extra;
})
} jump({
type: type,
url: url,
extra: extra
})
}
// 定义页面配置 // 定义页面配置
defineExpose({}); defineExpose({});
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
@import "@/common.less"; @import "@/common.less";
...@@ -646,6 +773,8 @@ defineExpose({}); ...@@ -646,6 +773,8 @@ defineExpose({});
position: absolute; position: absolute;
top: 0rpx; top: 0rpx;
right: 0rpx; right: 0rpx;
width: 226rpx;
height: 166rpx;
.integralIcon { .integralIcon {
position: absolute; position: absolute;
width: 226rpx; width: 226rpx;
...@@ -863,3 +992,4 @@ defineExpose({}); ...@@ -863,3 +992,4 @@ defineExpose({});
} }
} }
</style> </style>
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