hejianhao
2026-08-21 343c97a1de4f8c73463f27ed45240fe8c63bfecd
fix0806: 输密码的2个地方也需要登录
2个文件已修改
43 ■■■■■ 已修改文件
traditionalApp/pages/good/good.vue 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
traditionalApp/pages/home/home.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
traditionalApp/pages/good/good.vue
@@ -53,7 +53,9 @@
<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('')
@@ -61,16 +63,43 @@
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()
@@ -85,10 +114,12 @@
        }
    } catch (error) {
        console.error('检查密码状态失败:', error)
        // 检查失败允许下次 onShow 重试。
        passwordChecked.value = false
    } finally {
        loading.value = false
    }
})
}
/**
 * 校验项目中心密码,通过后展示三个入口。
traditionalApp/pages/home/home.vue
@@ -398,12 +398,18 @@
    /**
     * 经营者培训入口跳转:
     *  - 需要密码的直播(hasPassword === true)未登录时直接跳转登录页,
     *    既不进入密码验证页,也避免输对密码后进入详情。
     *  - 仅当后台明确返回 hasPassword === true 时先进入密码验证页
     *    - 有正在直播的场次(LIVING)→ 跳转直播视频播放页(watchLive)
     *    - 无正在直播 → 跳转课程介绍页(liveDetail)
     */
    const goOperatorTraining = () => {
        const targetCourse = operatorTrainingLiveCourse.value;
        if (targetCourse?.hasPassword === true && !resolveCurrentAppUserId()) {
            goLoginPage();
            return;
        }
        let targetPageUrl = '';
        if (!targetCourse || !targetCourse.courseId) {
            targetPageUrl = '/pages/liveDetail/liveDetail';