| | |
| | | |
| | | <script setup lang="ts"> |
| | | import { onMounted, ref } from 'vue' |
| | | import { onShow } from '@dcloudio/uni-app' |
| | | import { verifyProjectIntroductionPassword, checkProjectIntroductionPasswordEnabled } from './service.js' |
| | | import { resolveCurrentAppUserId } from '@/utils/app-user.js' |
| | | |
| | | const statusBarHeight = ref(0) |
| | | const password = ref('') |
| | |
| | | const unlocked = ref(false) |
| | | const submitting = ref(false) |
| | | const loading = ref(true) |
| | | // 密码启用状态只需检查一次,避免 tabbar 页每次切入重复请求。 |
| | | const passwordChecked = ref(false) |
| | | |
| | | onMounted(async () => { |
| | | onMounted(() => { |
| | | console.log('项目中心页面加载') |
| | | uni.getSystemInfo({ |
| | | success: (res) => { |
| | | statusBarHeight.value = res.statusBarHeight || 0 |
| | | } |
| | | }) |
| | | }) |
| | | |
| | | // 检查是否启用密码 |
| | | /** |
| | | * 项目中心是 tabbar 页,onShow 每次切入都触发: |
| | | * 未登录直接跳登录页;已登录后再执行密码启用检查, |
| | | * 保证登录成功切回时能正确解锁或展示密码界面。 |
| | | */ |
| | | onShow(() => { |
| | | // 未登录不允许进入项目中心,直接跳转登录页,不做密码检查与解锁。 |
| | | if (!resolveCurrentAppUserId()) { |
| | | console.log('项目中心未登录,跳转登录页') |
| | | uni.navigateTo({ |
| | | url: '/pages/login/login' |
| | | }) |
| | | return |
| | | } |
| | | checkPasswordStatus() |
| | | }) |
| | | |
| | | /** |
| | | * 检查项目中心是否启用密码,未启用则直接解锁。仅检查一次。 |
| | | */ |
| | | async function checkPasswordStatus() { |
| | | if (passwordChecked.value) { |
| | | return |
| | | } |
| | | passwordChecked.value = true |
| | | try { |
| | | console.log('开始检查密码启用状态...') |
| | | const isPasswordEnabled = await checkProjectIntroductionPasswordEnabled() |
| | |
| | | } |
| | | } catch (error) { |
| | | console.error('检查密码状态失败:', error) |
| | | // 检查失败允许下次 onShow 重试。 |
| | | passwordChecked.value = false |
| | | } finally { |
| | | loading.value = false |
| | | } |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 校验项目中心密码,通过后展示三个入口。 |