first commit

This commit is contained in:
2025-11-24 16:06:44 +08:00
commit e57d497751
165 changed files with 59349 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
import { isPageRequiresCertification } from '@/constants/menu'
import { useUserStore } from '@/stores/user'
import { computed, onMounted, ref } from 'vue'
import { useRoute } from 'vue-router'
export function useCertification() {
const route = useRoute()
const userStore = useUserStore()
const certificationLoading = ref(true)
const requiresCertification = computed(() => {
return isPageRequiresCertification(route.path)
})
// 改为 computed自动响应 userStore.isCertified 的变化
const isCertified = computed(() => {
return userStore.isCertified || false
})
const shouldShowCertificationNotice = computed(() => {
return requiresCertification.value && !isCertified.value && !certificationLoading.value
})
const checkCertificationStatus = async () => {
try {
// 这里应该调用实际的API来检查用户认证状态
// 实际项目中需要替换为真实的API调用
// 例如const { data } = await userApi.getCertificationStatus()
// 模拟API调用延迟
await new Promise(resolve => setTimeout(resolve, 500))
} catch (error) {
console.error('Failed to check certification status:', error)
} finally {
certificationLoading.value = false
}
}
const callProtectedAPI = async (apiMethod, ...args) => {
if (!isCertified.value && requiresCertification.value) {
console.warn('API call blocked: User not certified')
return null
}
try {
return await apiMethod(...args)
} catch (error) {
if (error.response?.status === 403) {
console.warn('API call failed: Access denied - certification required')
return null
}
throw error
}
}
const canCallAPI = computed(() => {
return !requiresCertification.value || isCertified.value
})
onMounted(() => {
if (requiresCertification.value) {
checkCertificationStatus()
} else {
certificationLoading.value = false
}
})
return {
isCertified,
certificationLoading,
requiresCertification,
shouldShowCertificationNotice,
checkCertificationStatus,
callProtectedAPI,
canCallAPI
}
}