import { defineStore } from 'pinia' import { getLastLoginTimeApi } from '@/api/user' import { waitNativeReady } from '@/core/mxApi' /** * 应用级状态 Store * * 存放全局共享的运行时状态,应用设置通过 persistedstate 持久化。 * initNativeDetection 在 main.ts 挂载前调用,组件读取时值已就绪。 */ export const useAppStore = defineStore( 'app', () => { /** 是否在原生 APP WebView 环境中 */ const isNative = ref(false) /** 是否在底部导航中显示看板入口 */ const showDashboardTab = ref(false) /** 是否在底部导航中显示待处理入口,默认显示以保持现有导航行为。 */ const showApprovalTab = ref(true) /** 是否在底部导航中显示公告入口 */ const showAnnouncementTab = ref(false) /** 是否在设置页显示公告入口开关,默认隐藏,可通过调试控制台切换。 */ const showAnnouncementSwitchSetting = ref(false) /** 是否在首页显示资金驾驶舱入口,默认不显示。 */ const showFundsCockpit = ref(false) /** 是否显示首页顶部 Banner,默认显示。 */ const showHomeBanner = ref(true) /** 是否显示人民币、外币头寸预报页面的顶部 Banner,默认显示。 */ const showPositionForecastBanner = ref(true) /** 后端返回的系统工作日期原始值,来自 /uaa/log/lastLoginTime 的 appDt。 */ const systemAppDate = ref('') /** 系统工作日期,页面日期控件使用 YYYY-MM-DD。 */ const systemWorkDate = computed(() => normalizeSystemWorkDate(systemAppDate.value) || today()) /** 系统工作日期,TAM 等接口使用 YYYYMMDD。 */ const systemWorkDateCompact = computed(() => systemWorkDate.value.replaceAll('-', '')) /** * 初始化原生环境检测 * * 等待敏行宿主注入完成后判断当前运行环境。 */ async function initNativeDetection() { isNative.value = await waitNativeReady() } function setShowDashboardTab(value: boolean) { showDashboardTab.value = value } function setShowApprovalTab(value: boolean) { showApprovalTab.value = value } function setShowAnnouncementTab(value: boolean) { showAnnouncementTab.value = value } function setShowAnnouncementSwitchSetting(value: boolean) { showAnnouncementSwitchSetting.value = value } function setShowFundsCockpit(value: boolean) { showFundsCockpit.value = value } function setShowHomeBanner(value: boolean) { showHomeBanner.value = value } function setShowPositionForecastBanner(value: boolean) { showPositionForecastBanner.value = value } function setSystemAppDate(value: string) { systemAppDate.value = value } /** * 从登录日志接口刷新系统工作日期。 * * 登录成功和首页健康检查时调用,避免继续使用持久化的旧工作日期。 */ async function refreshSystemWorkDate() { const response = await getLastLoginTimeApi() const appDt = response.data?.appDt if (!appDt || !normalizeSystemWorkDate(appDt)) { throw new Error('系统工作日期为空或格式不正确') } setSystemAppDate(appDt) } function clearSystemAppDate() { systemAppDate.value = '' } return { isNative, showDashboardTab, showApprovalTab, showAnnouncementTab, showAnnouncementSwitchSetting, showFundsCockpit, showHomeBanner, showPositionForecastBanner, systemAppDate, systemWorkDate, systemWorkDateCompact, initNativeDetection, setShowDashboardTab, setShowApprovalTab, setShowAnnouncementTab, setShowAnnouncementSwitchSetting, setShowFundsCockpit, setShowHomeBanner, setShowPositionForecastBanner, setSystemAppDate, refreshSystemWorkDate, clearSystemAppDate, } }, { persist: { key: 'mini2_app_settings', pick: [ 'showDashboardTab', 'showApprovalTab', 'showAnnouncementTab', 'showAnnouncementSwitchSetting', 'showFundsCockpit', 'showHomeBanner', 'showPositionForecastBanner', 'systemAppDate', ], }, }, ) function normalizeSystemWorkDate(value: string) { const text = value.trim() if (!text) return '' const dashedDate = text.match(/^(\d{4})-(\d{2})-(\d{2})/) if (dashedDate) { return `${dashedDate[1]}-${dashedDate[2]}-${dashedDate[3]}` } const compactDate = text.match(/^(\d{4})(\d{2})(\d{2})/) if (compactDate) { return `${compactDate[1]}-${compactDate[2]}-${compactDate[3]}` } return '' } function today() { const now = new Date() const year = now.getFullYear() const month = String(now.getMonth() + 1).padStart(2, '0') const day = String(now.getDate()).padStart(2, '0') return `${year}-${month}-${day}` }