diff --git a/src/App.vue b/src/App.vue index 5a4d0bb..20473ef 100644 --- a/src/App.vue +++ b/src/App.vue @@ -6,6 +6,7 @@ import { useUserStore } from "@/stores/userStore"; import { useDialogStore } from "@/stores/dialogStore"; import { useAuthStore } from "@/stores/authStore"; import { useWeixinShare } from "@/composables/useWeixinShare"; +import { useAppConfig } from "@/composables/useAppConfig"; import WechatOverlay from "@/components/WechatOverlay.vue"; // import MaintenanceDialog from "@/components/MaintenanceDialog.vue"; @@ -15,8 +16,11 @@ const userStore = useUserStore(); const dialogStore = useDialogStore(); const authStore = useAuthStore(); const { configWeixinShare, setDynamicShare } = useWeixinShare(); +const { loadAppConfig } = useAppConfig(); onMounted(() => { + void loadAppConfig(); + // 检查token版本,如果版本不匹配则清除旧token checkTokenVersion() @@ -218,7 +222,7 @@ const h5WeixinGetCode = () => { diff --git a/src/auto-imports.d.ts b/src/auto-imports.d.ts index b965e9a..a7ac111 100644 --- a/src/auto-imports.d.ts +++ b/src/auto-imports.d.ts @@ -120,6 +120,7 @@ declare global { const useAliyunCaptcha: typeof import('./composables/useAliyunCaptcha.js')['default'] const useAnimate: typeof import('@vueuse/core')['useAnimate'] const useApiFetch: typeof import('./composables/useApiFetch.js')['default'] + const useAppConfig: typeof import('./composables/useAppConfig.js')['useAppConfig'] const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference'] const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery'] const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter'] diff --git a/src/components/BaseReport.vue b/src/components/BaseReport.vue index d8a451e..4fa62b7 100644 --- a/src/components/BaseReport.vue +++ b/src/components/BaseReport.vue @@ -7,6 +7,23 @@ import { splitDWBG8B4DForTabs } from '@/ui/CDWBG8B4D/utils/simpleSplitter.js'; import { splitDWBG6A2CForTabs } from '@/ui/DWBG6A2C/utils/simpleSplitter.js'; import { splitCJRZQ5E9FForTabs } from '@/ui/CJRZQ5E9F/utils/simpleSplitter.js'; import { splitCQYGL3F8EForTabs } from '@/ui/CQYGL3F8E/utils/simpleSplitter.js'; +import { useAppConfig } from '@/composables/useAppConfig'; +import { useRoute } from 'vue-router'; + +// 与首页/查询表一致:报告保留天数由 App.vue 拉取的 /app/config 中 query.retention_days +const { appConfig } = useAppConfig(); + +const route = useRoute(); +/** + * App 内嵌 WebView 走 /app/report、/app/example(无 PageLayout 顶栏),sticky 的 offset-top 若为 46 + * 会与「为 van-nav-bar 预留」一致,在顶栏不存在时 Tab 上方会多出一块空白。 + * 浏览器内 /report、/example 仍带顶栏,保持 46。 + */ +const tabsStickyOffsetTop = computed(() => { + if (route.path.startsWith('/app/') || route.meta?.embedForApp) + return 0; + return 46; +}); // 动态导入产品背景图片的函数 const loadProductBackground = async (productType) => { @@ -782,7 +799,7 @@ watch([reportData, componentRiskScores], () => { - +
@@ -837,8 +854,7 @@ watch([reportData, componentRiskScores], () => { 1、本份报告是在取得您个人授权后,我们才向合法存有您以上个人信息的机构去调取相关内容,我们不会以任何形式对您的报告进行存储,除您和您授权的人外不会提供给任何人和机构进行查看。

-     2、本报告自生成之日起,有效期 30 - 天,过期自动删除。如果您对本份报告存有异议,可能是合作机构数据有延迟或未能获取到您的相关数据,出于合作平台数据隐私的保护,本平台将不做任何解释。 +     2、本报告自生成之日起,有效期 {{ appConfig.query.retention_days }} 天,过期自动删除。如果您对本份报告存有异议,可能是合作机构数据有延迟或未能获取到您的相关数据,出于合作平台数据隐私的保护,本平台将不做任何解释。

    3、若以上数据有错误,请联系平台客服。 diff --git a/src/components/PriceInputPopup.vue b/src/components/PriceInputPopup.vue index 839c856..da21afc 100644 --- a/src/components/PriceInputPopup.vue +++ b/src/components/PriceInputPopup.vue @@ -37,6 +37,8 @@