fix: 修复身体画像约课阻断、页面响应式丢失及多项边界问题

- fix(booking): 修复未认领画像阻断约课问题,支持约课事务内自动认领绑定
- fix(app): 修复 Pinia 状态解构导致响应式失效,补齐 PortraitRadar 组件实例传参
- fix(admin): 修复经营助手复测待办点击 404,优化体验课后线索回访文案
- fix(server): 线下评估日期间隔按中国时区校验,复测按期次单项核销,优化单次评估分享卡与限流清理
- test: 补齐 body-portrait-offline 与 booking 来源画像单元测试

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
richarjiang
2026-09-11 22:45:44 +08:00
parent ab6602e41d
commit d91282ecbd
18 changed files with 324 additions and 37 deletions

View File

@@ -28,6 +28,7 @@
<script setup lang="ts">
import { ref } from 'vue'
import { storeToRefs } from 'pinia'
import { onShow } from '@dcloudio/uni-app'
import CustomNavBar from '../../components/CustomNavBar.vue'
import PortraitRadar from '../../components/PortraitRadar.vue'
@@ -40,20 +41,18 @@ import { useUserStore } from '../../stores/user'
const navBarHeight = ref(`${getSystemLayout().navBarHeight}px`)
const portrait = useBodyPortraitStore()
const userStore = useUserStore()
const teaser = portrait.teaser
const report = portrait.report
const claimed = portrait.claimed
const { teaser, report, claimed } = storeToRefs(portrait)
onShow(async () => {
if (!portrait.teaser && !portrait.session) {
if (!teaser.value && !portrait.session) {
await portrait.loadMine().catch(() => {})
}
if (portrait.teaser) await portrait.track('report_viewed')
if (teaser.value) await portrait.track('report_viewed')
})
async function continueFlow() {
try {
if (!portrait.claimed) {
if (!claimed.value) {
if (!userStore.loggedIn) await userStore.login()
await portrait.claim()
}