Commit 67e3f569 authored by 张九刚's avatar 张九刚

feat: copyback

parent d177b5a6
...@@ -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: {
...@@ -109,12 +91,18 @@ const handleOkTouchStart = () => { ...@@ -109,12 +91,18 @@ 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()
} }
...@@ -127,11 +115,11 @@ const openFeedSelector = () => { ...@@ -127,11 +115,11 @@ 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
...@@ -139,10 +127,23 @@ const onFeedChange = (feedOption, index) => { ...@@ -139,10 +127,23 @@ const onFeedChange = (feedOption, index) => {
} }
const closePopup = () => { const closePopup = () => {
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>
...@@ -173,7 +174,7 @@ onMounted(() => { ...@@ -173,7 +174,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 +184,18 @@ onMounted(() => { ...@@ -183,18 +184,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 +213,22 @@ onMounted(() => { ...@@ -212,22 +213,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 +252,22 @@ onMounted(() => { ...@@ -251,23 +252,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')
......
...@@ -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>
......
...@@ -135,6 +135,49 @@ const sensorComponentLogTake = (logObj) => { ...@@ -135,6 +135,49 @@ const sensorComponentLogTake = (logObj) => {
sensorComponentLog(evt); 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,
...@@ -143,4 +186,6 @@ export default { ...@@ -143,4 +186,6 @@ export default {
sensorLogTake, sensorLogTake,
sensorComponentLog, sensorComponentLog,
sensorComponentLogTake, sensorComponentLogTake,
sensorPopLog,
sensorPopLogTake,
}; };
...@@ -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,21 @@ function editRecord(index) { ...@@ -723,9 +723,21 @@ 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() {
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 +812,12 @@ function onEditTypeChange(event) { ...@@ -800,6 +812,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
......
<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,9 +112,9 @@ ...@@ -112,9 +112,9 @@
</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" />
...@@ -258,7 +258,7 @@ const backHandler = () => { ...@@ -258,7 +258,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 +285,7 @@ const handleBannerClick = (item, index) => { ...@@ -285,7 +285,7 @@ const handleBannerClick = (item, index) => {
}) })
} }
} }
// 新增体检 // 新增体检
const onAdd = () => { const onAdd = () => {
...@@ -306,7 +306,14 @@ const onBtn = (type) => { ...@@ -306,7 +306,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;
...@@ -336,6 +343,12 @@ const onBtn = (type) => { ...@@ -336,6 +343,12 @@ const onBtn = (type) => {
// 提醒关闭 // 提醒关闭
const close = () => { const close = () => {
showPicker.value = false; showPicker.value = false;
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "产检提醒",
popName: "设置提醒时间弹窗",
buttonName: "取消"
});
} }
// 选择提醒事件 // 选择提醒事件
const handleChange = (e) => { const handleChange = (e) => {
...@@ -343,7 +356,7 @@ const handleChange = (e) => { ...@@ -343,7 +356,7 @@ const handleChange = (e) => {
} }
// 确认选择 // 确认选择
const handleConfirm = () => { const handleConfirm = () => {
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();
...@@ -382,35 +395,35 @@ const handleDateConfirm = (date) => { ...@@ -382,35 +395,35 @@ const handleDateConfirm = (date) => {
} }
// 添加计算滚动位置的方法 // 添加计算滚动位置的方法
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 +477,16 @@ const getInfoFn = async () => { ...@@ -464,16 +477,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,40 +508,40 @@ const getSettingFn = () => { ...@@ -495,40 +508,40 @@ 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(() => {
...@@ -561,8 +574,9 @@ onMounted(() => { ...@@ -561,8 +574,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 +596,8 @@ onMounted(() => { ...@@ -582,7 +596,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 +828,7 @@ onMounted(() => { ...@@ -813,6 +828,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%;
......
...@@ -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
} }
......
...@@ -274,11 +274,12 @@ ...@@ -274,11 +274,12 @@
<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" :id="'bottomLink' + index" 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: '首页-四屏',
}" :data-comlog="{ buttonName: `${qrNameList[index]}`
}" :data-comlog="{
xcxComponentClick: 'true', xcxComponentClick: 'true',
xcxComponentExposure: 'true', xcxComponentExposure: 'true',
pageName: '首页', pageName: '首页',
...@@ -566,7 +567,7 @@ export default { ...@@ -566,7 +567,7 @@ export default {
md.sensorComponentLogTake({ md.sensorComponentLogTake({
xcxComponentExposure: "true", xcxComponentExposure: "true",
pageName: "首页", pageName: "首页",
componentName: "焦点图", componentName: "首页banner",
componentContent: this.swiperList[0]?.title || '' componentContent: this.swiperList[0]?.title || ''
}); });
...@@ -705,8 +706,7 @@ export default { ...@@ -705,8 +706,7 @@ export default {
jumpLink(link, videoUrl, index, evt) { jumpLink(link, videoUrl, index, evt) {
if (evt) { if (evt) {
md.sensorLog(evt); md.sensorLog(evt);
if(evt.currentTarget.dataset.comlog) if (evt.currentTarget.dataset.comlog) {
{
md.sensorComponentLog(evt); md.sensorComponentLog(evt);
} }
} }
...@@ -890,7 +890,7 @@ export default { ...@@ -890,7 +890,7 @@ export default {
md.sensorComponentLogTake({ md.sensorComponentLogTake({
xcxComponentExposure: "true", xcxComponentExposure: "true",
pageName: "首页", pageName: "首页",
componentName: "焦点图", componentName: "首页banner",
componentContent: this.swiperList[e.detail.current].title componentContent: this.swiperList[e.detail.current].title
}); });
}, },
...@@ -1003,6 +1003,12 @@ export default { ...@@ -1003,6 +1003,12 @@ export default {
}, },
imagePopupJump() { imagePopupJump() {
md.sensorPopLogTake({
xcxPopClick: "true",
toolName: "首页",
popName: this.popupImageObj.title || "北纬47°鲜活溯源之旅",
buttonName: this.popupImageObj.btnName || "立即寻宝"
});
jump({ jump({
type: this.popupImageObj.jumpType, type: this.popupImageObj.jumpType,
url: this.popupImageObj.jumpUrl, url: this.popupImageObj.jumpUrl,
...@@ -1010,6 +1016,11 @@ export default { ...@@ -1010,6 +1016,11 @@ export default {
}); });
}, },
showImagePopup() { showImagePopup() {
md.sensorPopLogTake({
xcxPopExposure: "true",
toolName: "首页",
popName: this.popupImageObj.title || "北纬47°鲜活溯源之旅"
});
this.$refs.imagePopup.open('center'); this.$refs.imagePopup.open('center');
}, },
closePop1() { closePop1() {
......
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